C ++:如何让程序读取单词而不是字符?如何在输入“孤独”字符时让程序停止读取?

时间:2011-03-14 11:28:36

标签: c++

我需要Stephen Pratas“C ++ Primer Plus 5th Edition”第6章中的练习7的帮助。

练习是编写一个程序,将用户的输入读作“单词”,并计算每个单词开头的元音和辅音或“其他符号”。要停止程序,用户必须输入A LONE q。

我认为我已经想到了:

我只需要程序来读取每个单词的第一个字符,因为它只计算起始字符。

要知道输入是一个单词,程序将检测字符前面是否有“空格”,更确切地说,首先是“空格”,然后是字符/符号。

然后检测它是否是字母数字字符我将在字符上使用“isalpha()”并使用if / if else语句让程序检测它是否是元音或辅音如果我们假设isalpha()是的。

如果isalpha为false,程序会将该符号计为其他符号。

只要没有单独的q出现,循环就会继续。因此,我必须能够在没有程序停止循环的情况下编写安静,退出等字样。

所以对我的问题:

  1. 如何对上述条件进行循环检查? (后跟字符/符号的空格)
  2. 你如何定义一个单独的q?(我不是指这里定义的“命令”)并将其用作循环的退出条件。

3 个答案:

答案 0 :(得分:1)

  • 您可以使用局部变量来记住从输入读取的前一个字符,一次读取一个字符。

  • 单个字符是长度为1的单词。

答案 1 :(得分:1)

istream运算符>>当应用于字符串时读取单个单词 istream运算符>>当应用于角色时读取单个字符

  std::string  word;
  std::cin >> word;

  char         letter;
  std::cin >> letter; // read first no white space character.

  // Normally all >> operators drop prefix white space before doing their actual work
  // Hence the letter above will ignore whitespace characters. 
  // But you can suspend the dropping for prefix whitespace like this.

  std::cin >> std::noskipws >> letter.

答案 2 :(得分:0)

有两种可能的解决方案,但最简单的方法就是使用 事实上,你对“单词”的定义正是所使用的 >>在一个字符串上。如下所示:

std::string word
while (src >> word) ...

每次都会产生一个单词。

对于单词的其他定义,您可能需要定义 一个状态机,有像inWord这样的状态,在Words和。之间 无论如何,并实现相应的状态转换。