前言:
这道题没理解清题目表达意思,我开始想的是用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中查找a
int 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;
}