2017-04-21 36 views
-2
#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 *からconst char *に渡す方法

+1

タグをスパムしないでください。 CはC++はCではないではありません!それから[ask]を読んでください。あなたが求めているのは間違いです。 – Olaf

答えて

0

この説明:

あなたは初期化する場合:char **numStr = new char*[10];
をあなたが実際に既に* char型の10個の配列を持っています。

あなたはこのように想像することができます:
numStr = [addressOfChar-0、addressOfChar-1、...、addressOfChar-9]。
そして、ソート機能のために、あなたが直接、以下のようにYの開始インデックスと終了インデックスパラメータ、埋めることができます:あなたは、関数CMP(int cmp(const char *str1,const char *str2))でのstrcpyやstrcatののパラメータの場合
sort(numStr,numStr + length,cmp);

(const char **)にキャストする必要はありません。 str1とstr2はnumStrまたはaddressOfChar-Nの要素であるためです。メモリを使用するすべての変数を
bool check = (-1? True: false);

あなたはdeleteすることを忘れないでください:strcmpのために

あなたはリターンが-1結果が真であれば、あなたは以下のコードを試すことができますので、より小さい0を比較する必要がありますヒープ(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; 
} 
+0

ありがとうございます、それは動作します。大変申し訳ございませんが、私は投票できません。 – mHuster

関連する問題