C++输入'2 0'字符计数结果为1的原因详解
C++输入'2 0'字符计数结果为1的原因详解
在C++编程中,我们经常需要对字符串进行处理和分析。其中一个常见的任务是计算字符串中特定字符的数量。然而,有时看似简单的代码逻辑可能会导致意外的结果。本文将探讨一个这样的例子,解释为什么在使用特定代码计算'2 0'字符串中的非空格和非换行字符个数时,结果为1。
问题代码解析
考虑以下代码片段:cpp#include
using namespace std;
int main() { string n; int cnt = 0; cin >> n; for (int i = 0; i < n.size(); i++) { if (n[i] != 32 && n[i] != 10) { cnt++; } } cout << cnt << endl; return 0;}
这段代码旨在计算字符串 n 中非空格和非换行字符的数量。其中,32 表示空格的 ASCII 码,10 表示换行的 ASCII 码。
输入 '2 0' 后的意外结果
当我们输入 '2 0' 并运行这段代码时,预期的结果应该是3,因为字符串中存在三个字符:'2'、' ' 和 '0'。然而,实际的输出结果却是1。
原因分析:cin 输入流的行为
出现这种差异的原因在于 cin 输入流的行为。默认情况下,cin 使用空格作为分隔符将输入分割成多个部分。因此,当您输入 '2 0' 时,cin >> n 会将 '2' 和 '0' 作为两个不同的部分读取到字符串变量 n 中,而空格字符则被 cin 丢弃了。
修改代码以包含空格字符
如果希望将空格字符也计入数量中,我们需要修改判断条件,使其不排除空格字符:cppif (n[i] != 10) { cnt++;}
通过删除 n[i] != 32 条件,我们确保了只有换行字符会被排除在计数范围之外。
总结
在编写处理字符串输入的 C++ 代码时,务必牢记 cin 输入流默认使用空格作为分隔符的行为。根据实际需求,选择合适的判断条件以确保代码能够按照预期工作。对于需要精确控制字符读取的情况,可以考虑使用 getline() 函数读取整行输入,包括空格。
原文地址: https://www.cveoy.top/t/topic/o13 著作权归作者所有。请勿转载和采集!