确定字符串中是否包含子字符串,不区分大小写

时间:2014-07-10 22:57:18

标签: c++ string substring

我正在对HackerRank进行挑战,其中包括查找子串出现在一系列字符串中的次数。用户输入他们想要测试的字符串数,以查看它们是否包含“hackerrank”,对case不敏感。我在这里从另一个流行的答案中提取了一种方法,将字符串转换为大写。这是代码:

#include <iostream>
#include <string>
#include <cstdio>
#include <cctype>

std::string upperCase(std::string input) {
        for (std::string::iterator it = input.begin(); it != input.end(); ++ it)
                *it = toupper(*it);
        return input;
}

int main(){
        int numofStrings;
        std::cin >> numofStrings;
        std::string tweetString;
        int hackerRankOccurrences = 0;
        for (numofStrings; numofStrings>0; numofStrings--) {
                std::cin >> tweetString;
                bool found = upperCase(tweetString).find("HACKERRANK")!=std::string::npos;
                if (found) {
                        hackerRankOccurrences++;
                }               
        }
        std::cout << hackerRankOccurrences << std::endl;
}

在我的理解中,问题是这个upperCase方法返回不同行上输入的每个单词,例如:

  

您好,这是一个句子

变为:

  

您好,

     

     

IS

     

A

     

SENTENCE

这会导致for循环遍历字符串中的每个单词,减少每个使用单词的总用户输入numofStrings。

如何让upperCase返回单个字符串/单行输出?

1 个答案:

答案 0 :(得分:1)

这与upperCase完全无关,std::cin >> tweetString; 返回与传入的字符串完全相同的字符串。修复,更改:

getline(std::cin, tweetString);

{{1}}