将string类改为char,保持输入的作用不被改变:int main() { string str; map<string, int>m; while (getline(cin,str)) { int len = str.length(); if (!len) break; for(int i = len; i > 0; i--) { string str1 = str.substr(0, i); m[str1]++; } } while (getline(cin, str)) { if (m[str] > 0) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
时间: 2024-03-16 15:46:25 浏览: 56
可以将上述代码中的string类型改为char类型,并且保持输入的作用不被改变,具体修改如下:
```c++
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main() {
char str[1001];
map<string, int> m;
while (fgets(str, 1001, stdin)) {
int len = strlen(str);
if (len == 1 && str[0] == '\n') break;
for (int i = len; i > 0; i--) {
str[i] = '\0';
m[str]++; // 将char类型的字符串转为string类型的字符串
}
}
while (fgets(str, 1001, stdin)) {
int len = strlen(str);
if (len > 0 && str[len - 1] == '\n') str[len - 1] = '\0';
if (m[string(str)] > 0) cout << "YES" << endl; // 将char类型的字符串转为string类型的字符串
else cout << "NO" << endl;
}
return 0;
}
```
在上述修改中,我们将string类型的字符串改为了char类型的字符串,同时保持输入的作用不被改变。在第一个while循环中,我们使用了fgets()函数来获取输入的字符串,fgets()函数可以读取一行字符串,并将其存储到指定的字符数组中。在读取每行字符串后,我们使用for循环逐步截取字符串,并将其插入到map中,这里需要注意的是,我们需要在每个截取的字符串后面添加'\0',以确保字符串的正确性。在第二个while循环中,我们同样使用fgets()函数来获取输入的字符串,并且需要去除字符串末尾的'\n',然后将其转化为string类型的字符串,再到map中查找是否存在,最后输出结果。
阅读全文