c++ - 为什么 strlen(s) 与 s 的大小不同,为什么 cout char 显示的是字符而不是数字?
问题描述
'e'
我写了一段代码来计算一堆单词中有多少个字符。
例如,如果我键入"I read the news"
,则存在多少个 的计数器e
应该是 3。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[255],n,i,nr=0;
cin.getline(s,255);
for(i=1; i<=strlen(s); i++)
{
if(s[i-1]=='e') nr++;
}
cout<<nr;
return 0;
}
关于 C++ 中的字符,我有 2 个不清楚的地方:
在上面的代码中,如果我
strlen(s)
用 255 替换,我的代码就不起作用了。我只能输入一个单词,程序就停止了。我在学校被教过strlen(s)
string 的长度s
,在这种情况下,正如我声明的那样,它是 255。那么,为什么我不能只输入 255 而不是strlen(s)
?如果我正常运行上面的程序,它不会向我显示数字,就像它应该做的那样。它向我展示了一个字符(我相信它来自 ASCII 表,但我不确定),例如心形或钻石。它应该
e
从单词中打印 's 的数量。
有人可以向我解释这些吗?
解决方案
strlen(s)
s
为您提供变量中保存的字符串的长度,直到第一个 NULL 字符。因此,如果您输入“hello”,长度将为 5,即使s
容量为 255....nr
显示为字符,因为它被声明为char
.int
例如,要么将其声明为,要么int
在计算时将其转换为 ,您将看到一个数字。
推荐阅读
- zlib - 在 .eps 文件中解码和解压缩 AI9_DataStream
- javascript - 从 javascript fetch 将文档插入 mongoDB 数据库
- javascript - Material-UI(React):在 Type-Error 中使用 StyledComponents 和 TypeScript 访问主题
- javascript - 如果选中复选框,如何启用 DateTime?
- android - Android Studio 错误:无法连接到守护进程
- python - pygame sprite 的一个实例正在更改整个组 pos
- android - 在 Realm 的 recyclerview 中删除对象的问题
- java - 如何解决 draw() 它不绘制我的屏幕
- scala - 如何有条件地从列中删除前两个字符
- angular-material - 如何为 Angular Material Table SelectionModel 添加初始选择?