前言:
这道题没理解清题目表达意思,我开始想的是用map来记录个数,然后一个变量记录一开始出现的单词位置,不挺简单的吗,然后....就AC了2个..从错误提示能看到个数没啥问题,但是第一个单词位置不对,看了新样例发现,输入文本前面可能是空格....
样例:
输入
td
Td tLWCsrmt
输出
1 2
没AC过的代码:
#include <bits/stdc++.h>
using namespace std;
string s, tmp;
map<string, int> mp;
int main() {cin >> s;transform(s.begin(), s.end(), s.begin(),::tolower);int cnt = 0;int flag = -1;while (cin >> tmp) {transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);if (flag == -1 && tmp == s) {flag = cnt;}cnt += tmp.size();mp[tmp]++;cin.get();cnt += 1;}if (flag == -1) {cout << "-1";}else {cout << mp[s] << " " << flag;}return 0;
}
修整之后:
输入s两端需要加上空格,因为题目要求是一个独立的单词完全适配,不加空格会部分适配。
b加空格的原因是s加了空格(样例1那样目标出现在首部或者尾部)
#include <bits/stdc++.h>
using namespace std;
string s, b;
int cnt, pos = -1;
int main() {cin >> s;transform(s.begin(), s.end(), s.begin(),::tolower);s = ' ' + s + ' ';cin.get();getline(cin, b);//将b转化为小写transform(b.begin(), b.end(), b.begin(), ::tolower);b = ' ' + b + ' ';//在b中查找aint p = 0;while ((p = b.find(s, p)) != string::npos) {cnt++;//次数if (cnt == 1) pos = p;p++;}if (cnt > 0) printf("%d %d\n", cnt, pos);else printf("%d", -1);return 0;
}