为什么strlen与s的大小不同,为什么cout char显示的是字符而不是数字?

Pau*_*lP1 5 c++ ascii character

我写了一段代码来计算'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;
}
Run Code Online (Sandbox Code Playgroud)

我有两个关于C++中字符的不清楚的事情:

  1. 在上面的代码中,如果我strlen(s)用255 替换,我的代码就不起作用了.我只能输入一个单词,程序就会停止.我在学校被教过strlen(s)这个字符串的长度s,在这种情况下,就像我宣称的那样,是255.那么,为什么我不能只输入255而不是strlen(s)

  2. 如果我正常运行上面的程序,它不会显示一个数字,就像它应该做的那样.它向我展示了一个角色(我相信它来自ASCII表,但我不确定),就像一颗心或一颗钻石.它应该e从单词中打印出的数字.

有人可以向我解释这些吗?

Ian*_*Ian 5

  1. strlen(s)给出s变量中保存的字符串的长度,直到第一个NULL字符.所以如果输入"hello",长度将为5,即使s容量为255 ....
  2. nr显示为字符,因为它被声明为a char.int例如,要么声明它,要么将它投射到intcout'ing,你会看到一个数字.

  • 注意索引中的`i-1`,所以它是严格正确的,虽然不是惯用的风格. (2认同)