问题陈述如下
PS:忽略问题陈述中重复的输入格式。
这是我的代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve (int n, int q, string s ) {
for(int i = 0;i<q;i++){
string query;
cin>>query;
if(query =="pop_back"){
s.pop_back();
n--;
}
else if(query =="front"){
cout<<s[0]<<'\n';
}
else if(query=="back"){
cout<<s[n-1]<<'\n';
}
else if (query=="sort"){
int l,r;
cin>>l>>r;
if(l>r){
swap(l,r);
}
sort(s.begin()+l-1,s.begin()+r);
}
else if (query=="reverse"){
int l,r;
if(l>r){
swap(l,r);
}
reverse(s.begin()+l-1,s.begin()+r);
cout<<s;
}
else if (query=="print") {
int a;
cin>>a;
cout<<s[a-1]<<'\n';
}
else if (query=="substr"){
int l,r;
cin>>l>>r;
if (l>r){
swap(l,r);
}
string h = s.substr(l-1, r-l+1);
cout<<h<<'\n';
}
else {
char x;
cin>>x;
s.push_back(x);
n++;
}
}
}
signed main () {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n,q;
cin>>n>>q;
string s;
cin>>s;
solve(n,q,s);
}
此代码无法正常工作。
经过我最后的调试,我发现反向功能没有按预期工作。
用于输入
10 1
Buzzworthy
reverse 5 6
获得的输出是同一个单词本身。
我不明白为什么会发生这种情况。
除此之外,如果发现更多错误,请告诉我。
您没有将
l
和 r
作为来自 stdin
的用户输入。因此,新声明的变量l
和r
默认值为0。您只需添加一行:
cin >> l >> r;
这是整个程序(格式更好):
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve(int n, int q, string s)
{
for (int i = 0; i < q; i++)
{
string query;
cin >> query;
if (query == "pop_back")
{
s.pop_back();
n--;
}
else if (query == "front")
{
cout << s[0] << '\n';
}
else if (query == "back")
{
cout << s[n - 1] << '\n';
}
else if (query == "sort")
{
int l, r;
cin >> l >> r;
if (l > r)
{
swap(l, r);
}
sort(s.begin() + l - 1, s.begin() + r);
}
else if (query == "reverse")
{
int l, r;
// cout << l << '\t' << r << endl;
cin >> l >> r;
if (l > r)
{
swap(l, r);
}
reverse(s.begin() + l - 1, s.begin() + r);
cout << s;
}
else if (query == "print")
{
int a;
cin >> a;
cout << s[a - 1] << '\n';
}
else if (query == "substr")
{
int l, r;
cin >> l >> r;
if (l > r)
{
swap(l, r);
}
string h = s.substr(l - 1, r - l + 1);
cout << h << '\n';
}
else
{
char x;
cin >> x;
s.push_back(x);
n++;
}
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, q;
cin >> n >> q;
string s;
cin >> s;
solve(n, q, s);
}
附注输入仅包含小写英文字符。您输入的第一个字符为大写字符。 附言最好将问题以文本形式发布在 Stackoverflow 上。请避免将作业问题发布为图片。