如何将char *从char **传递给const char *
How to pass char * from char** to const char *
#include "stdafx.h"
#include <vector>
#include <string>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
int len = 10;
char * strNumber1 = new char[2*len+1];
char * strNumber2 = new char[2*len+1];
int cmp(const char *str1,const char *str2){
strcpy(strNumber1,*(const char**)str1);
strcat(strNumber1,*(const char**)str2);
strcpy(strNumber2,*(const char**)str2);
strcat(strNumber2,*(const char**)str1);
return strcmp(strNumber1,strNumber2);
}
string PrintMinNumber(vector<int> numbers) {
int length = numbers.size();
char **numStr = new char*[10];
for(int i = 0; i < length; i++){
sprintf(numStr[i],"%d",numbers[i]);
}
sort((char*) numStr[0],(char*)numStr[length],cmp);
// I don't know how to pass the char* from char** numStr;
string ans = "";
for(int i = 0; i < length; i++){
ans += numStr[i];
}
return ans;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[3] = {3,32,321};
vector<int> numbers(a,a+3);
cout<<PrintMinNumber(numbers);
return 0;
}
以上是我的代码,用于解决问题,这是从3,321,32中获取最小数字的方法。我们可能会得到结果是321323。因此,我需要对字符串进行排序,但是我不知道如何将char *
从char**
传递到const char*
。您能解释一下我需要做什么吗?
此改进的解释:
如果初始化:char **numStr = new char*[10];
实际上,您已经有10个类型的char *阵列。
您可以想象这样的:
numstr = [addressofchar-0,addressofchar-1,...,addressofChar-9];
然后,对于排序函数,您可以直接填充y的开始指标和端口索引参数,如下:
sort(numStr,numStr + length,cmp);
对于功能CMP(int cmp(const char *str1,const char *str2)
(中strcpy和Strcat的参数,您无需施放到(const char **)
。因为str1和str2是numstr或addressofChar-n。
对于strcmp,您必须比较小于0,因为如果返回-1结果是正确的,则可以尝试以下代码:
bool check = (-1? True: false);
您不会忘记delete
使用内存堆(new
(的所有变量,因为它可能导致泄漏内存。
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
int len = 10;
char * strNumber1 = new char[2*len+1];
char * strNumber2 = new char[2*len+1];
int cmp(const char *str1,const char *str2){
strcpy(strNumber1,str1);
strcat(strNumber1,str2);
strcpy(strNumber2,str2);
strcat(strNumber2,str1);
return strcmp(strNumber1, strNumber2) < 0;
}
string PrintMinNumber(vector<int> numbers) {
int length = numbers.size();
char **numStr = new char*[10];
for(int i = 0; i < length; i++){
if (numbers[i] == 0)
{
numStr[i] = new char[2];
}
else
{
numStr[i] = new char[log(numbers[i]) + 2];
}
sprintf(numStr[i],"%d",numbers[i]);
}
sort(numStr,numStr + length,cmp);
string ans = "";
for(int i = 0; i < length; i++){
ans += numStr[i];
delete[] numStr[i];
}
delete[] numStr;
return ans;
}
int main()
{
int a[] = { 321,3,32 };
vector<int> numbers(a,end(a));
cout<<PrintMinNumber(numbers);
delete[] strNumber1;
delete[] strNumber2;
return 0;
}
相关文章:
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*