strlen to int 为什么我不能这样做?
strlen to int Why can't I do this?
这段代码哪里错了?它不允许我将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()
,因为s
是std::string
。
此外,由于性能问题,您可能不应该在这样的循环中计算strlen
(另一方面,s.size
应该能够在O(1(时间内完成,所以它是可以的(。
然后你的程序还有其他一些问题,已经在第一行了。使用#include //iostream
不能包含文件,应该使用#include <iostream>
。
其次,您不能像尝试那样在for循环的条件下声明变量,并且可能不应该赋值而不是比较(一个等号是而不是与两个等号相同(。你应该写for( int i = 0; i != s.size(); i++ )
第三,您不应该在for
构造中的更新表达式中进行检查。那里的内容只会被评估以更新循环变量,而真值将被忽略。
总的来说,我认为你应该拿起一本C++书的介绍,或者在网上找到一本好的教程。你的代码只需要遇到很多问题就可以得出结论,你甚至已经学会了最基本的C++。
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 为什么我不能在 for 循环中出现这样的条件?(C++)
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 为什么C++编译器不能做更好的常量折叠?
- 为什么我不能替换这样的字符串上的字符?
- 为什么我不能像这样直接将 int 分配给 int 指针:int *p = 6;?
- 函数如何在不这样做的情况下在新线程上运行"as if"?
- 为什么在接受输入后循环退出时不会这样做
- 为什么我不能在未链接的 DLL 上调用方法,但可以这样做?C++
- 为什么我不能像这样C++访问类的对象?
- 不能做嵌套函数,有什么办法呢?
- 为什么指针不能指向张贴增量,而可以这样做才能预先递增
- 为什么static_cast不允许这样做
- 声明和带有定义的声明.为什么不允许这样做
- 如果一个引用一旦被初始化为一个对象,它就不能被改变,为什么这样做呢?
- strlen to int 为什么我不能这样做?
- 在类中传递私有变量——为什么不允许这样做
- C++实例化结构错误,为什么不允许这样做?
- 共享库没有链接/不能这样做
- 1D 数组衰减为指针,但 2D 数组不会这样做,为什么?