我正在对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返回单个字符串/单行输出?
答案 0 :(得分:1)
这与upperCase
完全无关,std::cin >> tweetString;
返回与传入的字符串完全相同的字符串。修复,更改:
getline(std::cin, tweetString);
到
{{1}}