题目:
P1308 [NOIP 2011 普及组] 统计单词数 - 洛谷
输入
输入格式
共 2 行。
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
- 第二行的输入一个包含字母和空格的字符串,cin做不到,cin读取时,从键盘上输入的每个数据之间必须用空格或 Enter 键分开。所以最后虽然输入一行,但是只会接收第一个空格前面的内容赋值给变量。
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;int main()
{string word;//给定的单词string content;//文章cin >> word;cin >> content;cout << word << endl;cout << content << endl;return 0;
}
可以看到word变量只接收了一个单词(to)
所以需要用到/n作为结束,但是cin和getline一起使用的时候,需要注意对cin输入结束后未丢弃的/n进行处理
- cin遇到'\n'结束,但不会丢弃'\n',而getline默认遇到‘\n’结束。因此需要处理cin残留的'\n'。
- getline遇到结束符后会结束输入并抛弃结束符。
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;int main()
{string word;//给定的单词string content;//文章cin >> word;getline(cin, content);cout << word << endl;cout << content << endl;return 0;
}
可以看到,在控制台上没有出现getline()的输入提示,而直接跳过。
可以在上面再使用一次getline()处理/n
或者使用getchar(以回车符作为结束标志)处理/n
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;int main()
{string word;//给定的单词string content;//文章cin >> word;getchar();getline(cin, content);cout << word << endl;cout << content << endl;return 0;
}
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;int main()
{string word;//给定的单词string content;//文章cin >> word;getline(cin,content);getline(cin, content);cout << word << endl;cout << content << endl;return 0;
}
完整代码
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
using namespace std;int main()
{string word;//给定的单词string content;//文章cin >> word;getline(cin,content);//处理cin残留的/ngetline(cin, content);//把单词和句子全部转换为小写for (int i = 0; i < word.size(); i++){if (word[i] >= 'A' && word[i] <= 'Z'){word[i] = word[i] + 'a' - 'A';}}for (int i = 0; i < content.size(); i++){if (content[i] >= 'A' && content[i] <= 'Z'){content[i] = content[i] + 'a' - 'A';}}//在单词和句子的前面和后面都加上空格进行匹配,可以处理部分匹配的情况word = " " + word + " ";content = " " + content + " ";int count=0;//计数,总共出现几次int first;//第一次出现的位置int pos = content.find(word);if (pos == -1){cout << -1 << endl;return 0;}int temp = pos;for (; pos!= -1;){count++;pos = content.find(word, pos+1);}cout << count << " " << temp << endl;return 0;
}