你的代码中存在一些问题,我已经帮你修复了。以下是修复后的代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
string word, s;
int pos = 0;
int cnt = 0;
getline(cin, word);
getline(cin, s);
s = ' ' + s + ' ';
word = ' ' + word + ' ';
for (int i = 0; i < s.size(); i++)
s[ i] = tolower(s[ i]);
for (int i = 0; i < word.size(); i++)
word[ i] = tolower(word[ i]);
size_t start_pos = 0;
while((start_pos = s.find(word, start_pos)) != std::string::npos) {
cnt++;
start_pos += word.size();
}
if (cnt == 0)
cout << "-1";
else
cout << cnt << " " << s.find(word) - 1 << endl; // subtract 1 because we added a space at the beginning of s
}
这个程序的目的是计算一个字符串(word)在另一个字符串(s)中出现的次数,并输出第一次出现的位置。这个程序首先读取两个字符串,然后将它们转换为小写。然后,它在字符串s中查找字符串word,并计算出现的次数。如果word在s中没有出现,程序将输出\"-1\"。否则,它将输出出现的次数和第一次出现的位置。
注意,我们在查找word时,每次都从上次找到的位置之后开始查找,以避免重复计数。我们使用了std::string::find函数,它返回找到的子字符串的第一个字符的位置,如果没有找到子字符串,它将返回std::string::npos。我们使用了std::string::npos来检查是否找到了子字符串。
另外,你的代码中存在一些问题,我已经帮你修复了。以下是修复后的代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
string word, s;
int pos = 0;
int cnt = 0;
getline(cin, word);
getline(cin, s);
s = ' ' + s + ' ';
word = ' ' + word + ' ';
for (int i = 0; i < s.size(); i++)
s[ i] = tolower(s[ i]);
for (int i = 0; i < word.size(); i++)
word[ i] = tolower(word[ i]);
size_t start_pos = 0;
while((start_pos = s.find(word, start_pos)) != std::string::npos) {
cnt++;
start_pos += word.size();
}
if (cnt == 0)
cout << "-1";
else
cout << cnt << " " << s.find(word) - 1 << endl; // subtract 1 because we added a space at the beginning of s
}
这个程序的目的是计算一个字符串(word)在另一个字符串(s)中出现的次数,并输出第一次出现的位置。这个程序首先读取两个字符串,然后将它们转换为小写。然后,它在字符串s中查找字符串word,并计算出现的次数。如果word在s中没有出现,程序将输出\"-1\"。否则,它将输出出现的次数和第一次出现的位置。
注意,我们在查找word时,每次都从上次找到的位置之后开始查找,以避免重复计数。我们使用了std::string::find函数,它返回找到的子字符串的第一个字符的位置,如果没有找到子字符串,它将返回std::string::npos。我们使用了std::string::npos来检查是否找到了子字符串。
另外,我们在s和word的开始和结束都添加了一个空格,所以在输出第一次出现的位置时,我们需要减去1,以得到在原始字符串中的位置。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 |