为什么 isalpha() 停在空格处
Why does isalpha() stop at spaces?
int main(){
char check[256], c;
int ch=0;
cin >> check;
while (check[ch]){
c = check[ch];
if (isalpha(c))putchar(c);
ch++;
}
}
例如,如果check[256]
是"这个和这个",程序只会打印"这个",这意味着在第一个空格它停止,第一个问题是为什么,其次有没有办法停止它,所以它会打印"这个和这个"或"这个和这个"?
如果你构建了一个简短的例子,像这样:
#include <stdio.h>
#include <ctype.h>
int main()
{
char check[256] = "this and this";
int ch = 0;
while (check[ch])
{
char c = check[ch];
if (isalpha(c)) putchar(c);
ch++;
}
return 0;
}
您会注意到这完全按照您希望的方式工作。所以罪魁祸首是这句话:
cin >> check;
如果要读取一行,请使用 getline:
std::getline(std::cin, check);
你真的应该使用
#include <iostream>
#include <string>
并停止使用字符数组。您使用的是C++,而不是 C。
在这一行中:
cin >> check;
只有第一个单词会被读入 char 数组,因为这是 CIN 的默认行为。请验证数组是否包含整个字符串。
我很
惊讶还没有人反对这一点。无论如何,不要使用带有 std::cin
的普通char
数组。您是否考虑过如果某些用户输入的单词比缓冲区大小长,会发生什么情况?
当然,你会改用std::string
,当然,你会用std::getline(std::cin, s)
来阅读一行。
例:
#include <iostream>
#include <string>
#include <cctype>
int main() {
std::string s;
if (std::getline(std::cin, s))
for (char c : s)
if (std::isalpha(c))
std::cout << c;
std::cout << "n";
}
输出:
$ g++ test.cc -std=c++11 && echo "Hello World" | ./a.out
HelloWorld
相关文章:
- 2D数组来自文本输入,中间有空格
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 如何在c++中使用system()来运行包含空格的python脚本
- basic_string的前导/尾部不区分空格的特征
- 移除前面有空格的前2个字符串
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 在字符串中插入空格
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- C++为一串单词添加空格
- 使用另一个字符串从字符串中删除空格
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- 如何打印不带空格的输入整数?
- C++ 中的 ISALPHA 无法正常工作,无法正常工作
- 野牛/yacc 解析器在不被空格分隔时跳过 grammer - "unexpected $end"
- 为什么 isalpha() 停在空格处