如何检查单词是否以大写字母开头,如果是,则设置条件?

时间:2016-11-01 09:58:01

标签: c++ string

我正在尝试执行一个程序“读取用户输入的文本行,并用'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,但我似乎无法弄清楚如何。谢谢你的帮助。

编辑:我现在终于知道如何编写代码了,它完美无缺!感谢所有帮助过的人。 :)

1 个答案:

答案 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不为空时,才会评估右手参数。