如何将char *从char **传递给const char *

How to pass char * from char** to const char *

本文关键字:char const      更新时间:2023-10-16
#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;
}