检查字符串中的字符和校验位中的空白区域

时间:2015-03-25 23:16:29

标签: c++ string while-loop char

所以我遇到了这个问题:

  

编写一个读取文本文件并检查其正确性的程序   这个单词。如果一个单词仅以字符开头,则该单词是正确的   不包含任何数字。输入以分号结尾   ;

我尝试以两种方式做到这一点:

#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不会读取空格,为什么字符串不会读取数字?

2 个答案:

答案 0 :(得分:2)

cin >> text忽略前导空格。

text为单char时,>>会读取下一个字符(如果可用),否则会失败。

textchar数组时,>>会读取字符,直到遇到空格,达到最大宽度或失败。

无论哪种方式,>>都不会返回它跳过的空格。因此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);