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 ++:如何使程序读取单词而不是字符?以及如何让程序在输入“孤独”字符时停止阅读?的主要内容,如果未能解决你的问题,请参考以下文章
如何让我的应用程序读取应用程序配置而不是 machine.config?
获取 pandas.read_csv 以将空值读取为空字符串而不是 nan