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

Posted

技术标签:

【中文标题】C ++:如何使程序读取单词而不是字符?以及如何让程序在输入“孤独”字符时停止阅读?【英文标题】:C++: How to make a program read words instead of character? And how to make the program stop reading when entering a "lone" character? 【发布时间】:2011-03-14 11:28:36 【问题描述】:

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

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

我想我已经想通了:

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

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

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

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

只要没有单独的 q 出现,循环就会继续。所以我必须能够在程序不停止循环的情况下写出安静、退出等词。

所以对于我的问题:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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.

【讨论】:

你怎么把你的姓氏从你的个人资料中删除了,是 Martin York - 对吗? @sonicoder:你怎么不使用你的真实姓名? :-) 同样的原因。 York:我坚持认为这可能是 Neil Buttersworth 即将推出的另一集,因为这正是他在匿名/疯狂前几天所做的事情。 :D【参考方案3】:

有两种可能的解决方案,但最简单的就是使用 事实上,您对“单词”的定义正是 字符串上的 >>。所以像:

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

每次都会产生一个词。

对于单词的其他定义,您可能需要定义 状态机,具有 inWord、betweenWords 和 无论如何,并实现相应的状态转换。

【讨论】:

以上是关于C ++:如何使程序读取单词而不是字符?以及如何让程序在输入“孤独”字符时停止阅读?的主要内容,如果未能解决你的问题,请参考以下文章

读取管道(C/C++),没有错误,但不是所有数据

如何让我的应用程序读取应用程序配置而不是 machine.config?

读取单词并将它们存储到数组中

获取 pandas.read_csv 以将空值读取为空字符串而不是 nan

CSV DictReader,如何强制“”中的部分作为列表而不是字符串读取

C#字符串长度错误