这段代码错在哪里?
它不允许我将devicesMenu.remove(deviceId);
转换为strlen(s)
,我可以迭代它,直到int
等于字符串的长度。
i
答案 0 :(得分:3)
问题不在于strlen
的结果不能转换为int
,而strlen
无法与std::string
一起使用}。
strlen
用于" C字符串",以零结尾的字符数组。
std::string
有一个size
成员函数:
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
cout << s[i] << endl;
}
}
C标题<string.h>
中没有任何内容适用于std::string
reference可能很有用。
答案 1 :(得分:0)
因为strlen
期望获得char const*
作为其参数。您应该使用s.size()
,而s
是std::string
。
另外,由于性能问题,你可能不应该在循环中计算strlen
(另一方面s.size
应该能够在O(1)时间内完成,这样就可以了)。
然后还有第一个问题,您的程序存在其他一些问题。您无法使用#include //iostream
添加文件,而应使用#include <iostream>
。
其次你不能在你试图做的情况下在for循环的条件下声明一个变量,你可能不应该分配而不是比较(一个等号是不相同的二)。你应该写for( int i = 0; i != s.size(); i++ )
第三,你不应该在for
构造中的更新表达式中进行检查。那里只会进行评估以更新循环变量等,并忽略真值。
总的来说,我认为你应该学习C ++书籍的介绍或者在线找到一个好的教程。你的代码只需要解决许多问题就可以得出结论,你已经学会了最基本的C ++。
答案 2 :(得分:0)
strlen
适用于char
数组。
std::string
有一个名为size
和length
的成员函数。
如果您仍想使用strlen,可以调用c_str
并将返回的字符串传递给strlen
。
std::size_t length = s.size();
for (int i = 0; i < length; ++i)
您还可以迭代std::string
的元素:
for (std::string::iterator itr = s.begin(); itr != s.end(); ++itr)
{
std::cout << *itr << std::endl;
}