无法将字符串转换为 const char/string* 到 int*
Posted
技术标签:
【中文标题】无法将字符串转换为 const char/string* 到 int*【英文标题】:Cannot convert string to const char/string* to int* 【发布时间】:2017-01-22 22:28:18 【问题描述】:首先,我想说我是一个初学者。抱歉我的愚蠢问题。
我的程序应该询问您要输入的单词数量。特别是说这个标签长度是指针标签指向单词标签的长度(可能听起来令人困惑,但英语不是我的第一语言,抱歉,我还不太了解指针)。
单词标签也应该有每个单词的准确长度,因此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;
【问题讨论】:
strlen
不采用类字符串对象,而是采用指向字符串char*
的常量指针
什么是标签?你的意思是数组(如表中)?
t
是 int**
类型,t[i]
是 int*
类型。您不能将std::string*
对象分配给int*
。再加上代码中的一些其他错误;您可能想浏览一些 resources 以帮助您了解 C++ 类型系统,而不是我们在这里解释的范围
你编译这个时启用了一些(全部?)警告
【参考方案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;
【讨论】:
坦率地说。代码是一团糟。它应该被转储并重新启动 @EdHeal:是的,你是真的!因此我建议他/她使用此代码std::vector<std::string>
可能是一个改进。
@YSC:是的,这是个好主意,但 OP 似乎没有相关背景以上是关于无法将字符串转换为 const char/string* 到 int*的主要内容,如果未能解决你的问题,请参考以下文章
将 Swift 字符串数组转换为 const char * const *
C++ 无法将参数从 '*type' 转换为 'const type &'