所以我遇到了这个问题:
编写一个读取文本文件并检查其正确性的程序 这个单词。如果一个单词仅以字符开头,则该单词是正确的 不包含任何数字。输入以分号结尾 ;
我尝试以两种方式做到这一点:
#include<iostream>
using namespace std;
int main()
{
char text;
cout<<"Enter a group of words ending with a semicolon ; ";
cin>>text;
int ctr=0;
while(text !=';')
{
if (text == ' ') ctr++;
cin>>text;
}
cout<<ctr;
return 0;
}
但这不能在空格处增加。
我尝试使用Strings而不是Chars,单词计数器工作,但text == "0"
(例如)也无法正常工作..
为什么Char不会读取空格,为什么字符串不会读取数字?
答案 0 :(得分:2)
cin >> text
忽略前导空格。
当text
为单char
时,>>
会读取下一个字符(如果可用),否则会失败。
当text
是char
数组时,>>
会读取字符,直到遇到空格,达到最大宽度或失败。
无论哪种方式,>>
都不会返回它跳过的空格。因此text
永远不会等于' '
。此外,你的计数器应该计算读取的实际单词,而不是它们之间的空格。
尝试更像这样的事情:
#include <iostream>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
cout << "Enter a group of words ending with a semicolon ; ";
char text[512];
int ctr = 0;
while (cin >> setw(512) >> text)
{
if (strcmp(text, ";") == 0) break;
++ctr;
}
cout << ctr;
return 0;
}
答案 1 :(得分:1)
也许最简单的方法是将您的输入读入std::string
,然后搜索不在一组有效字符中的字符。
例如:
const std::string valid_characters = "abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string text_from_input;
std::getline(std::cin, text_from_input);
std::string::size_type position_of_invalid_char =
text_from_input.find_first_not_of(valid_characters);