我正在尝试执行一个程序“读取用户输入的文本行,并用'baby'替换所有四个字母的单词,如果这个四个字母单词的第一个字母大写(例如Love) ,必须用“宝贝”这个词代替。除非用户输入“退出”,否则程序必须继续。“
我已经完成了程序应该用“baby”替换所有四个字母单词的部分,程序应该只在用户输入“exit”时终止,但我似乎无法弄清楚如何检查单词是否以大写字母开头,如果是,请将其替换为“Baby”一词。
这是我的计划:
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <cctype>
using namespace std;
int main()
{
std::string input;
std::string word;
while (std::cin >> input)
{
if (input == "exit")
{
break;
}
std::stringstream ss(input);
int count = 0;
while (ss >> word)
{
if(word.size() == 4)
word = "baby";
std::cout << word << ' ';
++count;
}
}
}
======================================
更清楚:
如果我输入You are my love
,则输出You are my baby
,正确无误。
但是如果我输入You are my Love
,它应该输出You are my Baby
,但我似乎无法弄清楚如何。谢谢你的帮助。
答案 0 :(得分:5)
问题减少到检查word
的第一个字母:您可以使用word[0]
执行此操作,检查word
的长度是否为非零。
无法做的是使用if (word[0] >= 'A' || word[0] <= 'Z')
,因为这会对您的平台使用的编码做出假设。 (例如,EBCDIC在一个块中没有大写字母!)
可以做的是使用std::isupper
,并允许它使用其默认语言环境。请参阅http://en.cppreference.com/w/cpp/string/byte/isupper。
将这些放在一起,使用if (!word.empty() && std::isupper(word[0]))
,由于&&
的短路性质,只有当word
不为空时,才会评估右手参数。