2017-01-22 4 views
-5

Во-первых, я хочу сказать, что я новичок. Извините за мои глупые вопросы.Невозможно преобразовать строку в const char/string * to 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' не принимает строковый объект класса, но константный указатель на строку символов' символ * ' – 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]; 
  • Вы действительно хотите принять ау строк, но код действительно беспорядок, так что если вы хотите, чтобы это как:

    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

@EdHeal: да, вы правдивы! поэтому я предлагаю этот код для него – Raindrop7

+1

'std :: vector ' может быть улучшением. – YSC

Смежные вопросы