2017-01-22 22 views
-5

最初に、私は初心者です。私のばかげた質問には申し訳ありません。文字列をconst char/string *にintに変換できません*

私のプログラムでは、挿入する単語の量を尋ねる必要があります。このタブの長さは、単語タブを指し示すポインタの長さです(紛らわしいかもしれませんが、英語は母国語ではありません私の謝罪、私はまだ本当にポインタを理解していない)。

単語タブも各単語の正確な長さを持つ必要があります。したがって、strlenです。私は間違って何をしていますか?

int il,len; 
string x; 
cout<<"Amount of words: "; 
cin>>il; 
int **t; 
t=new int*[il]; 
for(int i=0; i<il; i++) 
{ 
    cout<<"Word: "; 
    cin>>x; 
    len=strlen(x); 
    t[i]=new string[len]; 
    cout<<endl; 
} 
cout<<"You wrote:"<<endl; 
for(int i=0; i<il; i++) 
{ 
    cout<<t[i]; 
    delete [] t[i]; 
} 
delete[] t; 
+0

'strlen'が文字列' char型にクラス文字列オブジェクトが、constのポインタを取ることはありません* ' – Raindrop7

+0

何をタブですか?配列(テーブルのように)を意味しますか? –

+3

't'は' int ** '型で、' t [i ]'は 'int *'型です。 'std :: string *'オブジェクトを 'int *'に代入することはできません。あなたのコードのいくつかの他のエラーと結びついています。いくつかの[リソース](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を見て、ここで説明できるよりもC++型システムの理解を深めることができます – WhiZTiM

答えて

1

strlen()クラスstringオブジェクトを取る代わりに、それは文字列char*へのポインタを取りません。

len = strlen(x); // error so correct it to: 
len = x.length(); 

また、あなたがクラス文字列の整数へのポインタを初期化することはできません。

int **t; 
t[i]=new string[len]; 
  • 本当にarrが必要です文字列のAYが、あなたはどのようにこのたいので、もしコードが本当にめちゃくちゃです:

    int il; 
    
    cout << "Amount of words: "; 
    cin >> il; 
    
    string *t; 
    t = new string[il]; 
    
    for(int i = 0; i < il; i++) 
    { 
        cout << "Word: "; 
        cin >> t[i]; // there's no need for a temporary string `x`; you can directly input the elements inside the loop 
        cout << endl; 
    } 
    
    cout << "You wrote: " << endl; 
    
    for(int i = 0; i < il; i++) 
        cout << t[i] << endl; 
    
    delete[] t; 
    
+0

正直です。コードは混乱している。それはダンプされ、再度開始されるべきです –

+1

@エジプトール:はい、あなたは本当です!したがって私は彼/彼女の – Raindrop7

+1

'std :: vector 'のこのコードを改善することができます。 – YSC