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]
是“this and this”,程序将仅打印“this”,这意味着它在第一个空格停止,第一个问题是为什么,第二个是有办法阻止它它会打印“this and this”还是“thisandthis”?
答案 0 :(得分:4)
如果您构建了一个简短的示例,请执行以下操作:
#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>
并停止使用char数组。您使用的是C ++,而不是C。
答案 1 :(得分:2)
在这一行:
cin >> check;
只有第一个单词会被读入char数组,因为这是cin的默认行为。请验证该数组是否包含整个字符串。
答案 2 :(得分:0)
我很惊讶没有人反对这一点。无论如何不要使用char
数组std::cin
。您是否考虑过如果某个用户输入的字数超过缓冲区的长度,可能会发生什么?
当然,您可以使用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