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

strlen to int Why can't I do this?

本文关键字:不能 这样做 为什么 to int strlen      更新时间:2023-10-16

这段代码哪里错了?它不允许我将strlen(s)强制转换为int,这样我就可以迭代它,直到i等于字符串的长度。

#include <iostream>
#include <string.h>
#include <string>
using namespace std;
int main()
{
   string s;
   cin >> s;
   for (int i = 0; int n = (int)strlen(s); i < n, i++)
   {
      cout << s[i] << endl;
   }
}

问题不是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
参考资料可能很有用。

strlen适用于char阵列。

CCD_ 15具有名为CCD_ 16和CCD_。

如果您仍然想使用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;
}

因为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++。