lanjian1 @ 2024-07-22 10:43:20
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
string b;
cin>>b;
for(int i=1;i<=a;i++)
{
int c;
cin>>c;
if(c==1)
{
string d;
cin>>d;
b=b+d;
cout<<b<<endl;
}
if(c==2)
{
int d,e;
cin>>d>>e;
b=b.substr(d,d+e);
cout<<b<<endl;
}
if(c==3)
{
int d;
string e;
cin>>d>>e;
b=b.insert(a-1,e);
cout<<b<<endl;
}
if(c==4)
{
string d;
cin>>d;
if(b.find(d)<100)
cout<<b.find(d)<<endl;
else
cout<<-1<<endl;
}
}
return 0;
}
by zhao__sd @ 2024-07-22 10:54:18
你的代码中有几个问题需要修正,特别是关于操作 2、3 和 4 的实现部分。以下是对你代码的详细修改建议:
操作 2 的问题: b.substr(d, d+e) 是不正确的,因为 substr 的第二个参数是子串的长度,而不是结束位置。您应该使用 e 作为长度。 操作 3 的问题: b.insert(a-1, e) 中的 a-1 是不正确的,因为 a 是从输入中直接读取的,它表示在文档中的位置(从 0 开始)。但 a-1 可能不是你想要插入的索引,因为 a 已经是正确的索引了(除非你想在前一个位置插入,但题目要求在第 a 个字符前插入)。 操作 4 的问题: if(b.find(d) < 100) 是不正确的,因为 find 方法返回的是子串首次出现的位置(从 0 开始计数),如果未找到则返回 string::npos(一个特殊的常量,表示未找到)。你应该直接检查返回值是否为 string::npos
#include <iostream>
#include <string>
using namespace std;
int main() {
int q;
cin >> q;
string doc;
cin >> doc;
for (int i = 0; i < q; i++) {
int c;
cin >> c;
if (c == 1) {
string str;
cin >> str;
doc += str; // 在文档后面插入字符串
cout << doc << endl;
}
if (c == 2) {
int a, b;
cin >> a >> b;
// 注意:b 是长度,不是结束位置
doc = doc.substr(a, b);
cout << doc << endl;
}
if (c == 3) {
int a;
string str;
cin >> a >> str;
// 在第 a 个字符前插入字符串
doc.insert(a, str);
cout << doc << endl;
}
if (c == 4) {
string str;
cin >> str;
// 查找字符串并输出位置,如果未找到则输出 -1
size_t pos = doc.find(str);
if (pos != string::npos) {
cout << pos << endl;
} else {
cout << -1 << endl;
}
}
}
return 0;
}
by zhao__sd @ 2024-07-22 10:55:09
求关注
by lanjian1 @ 2024-07-22 11:02:23
@zhao_sd2010谢谢,已关
by lanjian1 @ 2024-07-22 11:03:23
@zhao_sd2010 谢谢,已关