strlen to int c ++ - 为什么我不能这样做?

时间:2015-10-07 06:23:40

标签: c++ casting

这段代码错在哪里? 它不允许我将devicesMenu.remove(deviceId); 转换为strlen(s),我可以迭代它,直到int等于字符串的长度。

i

3 个答案:

答案 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(),而sstd::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有一个名为sizelength的成员函数。

如果您仍想使用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;
}
相关问题