EOJ 3018 查找单词 个人错误分析
3018. 查找单词
单点时限: 2.0 sec
内存限制: 256 MB
有一个单词 W
,输出它在字符串 S
中从左到右第一次出现的位置 IDX
(设 S
中的第 1 个字符的位置为 1)。W
只由英文字母组成,S
除英文字母和汉字之外在任何位置(包括头和尾)另有一个或多个连续的空格。
查找单词时,不区分大小写,但要求完全匹配,即单词 W
必须与 S
中的某一独立单词在不区分大小写的情况下完全匹配。W
仅是 S
中某一单词的一部分就不算匹配。
输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。
接下来共 2T 行,对应每个问题有 2 行,表示 W 和 S (长度长度1≤W长度≤10;1≤S长度≤1000000)。
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:
等)。
然后对应每个问题在一行中输出 IDX。S
中没有找到 W
时输出 None
。
样例
input3 IN Find a word within a string in English and in Chinese. to Find a word within a string in English and in Chinese. In Find a word within a string in English and in Chinese.output
case #0: 29 case #1: None case #2: 33
我的提交
#includeusing namespace std; int main() { int t, i = 0, j, ret = 0; scanf("%d", &t); getchar(); string w, s; while (t--) { getline(cin, w); getline(cin, s);//输入选它就对了 transform(s.begin(), s.end(), s.begin(), ::toupper); transform(w.begin(), w.end(), w.begin(), ::toupper);//一种有趣的大小写转换写法 s += " ";//尾插一个空格,方便查找 if (s.find(w + " ") == 0)//利用string模板函数快速寻找,此处判断首单词 cout << "case #" << ret++ << ":" << endl << 1 << endl; else if (s.find(" " + w + " ") != -1)//判断句中单词 { cout << "case #" << ret++ << ":" << endl << s.find(" " + w + " ") + 2 << endl;//因为查照从0开始,并且`有前置空格,故+2 } else cout << "case #" << ret++ << ":" << endl << "None" << endl; } return 0; } //ps:如果添加" "+w查找属于没理解到关键,不加前后空格则查找会截断单词