字符串反转未发生

问题描述 投票:0回答:1

问题陈述如下

PS:忽略问题陈述中重复的输入格式。

enter image description hereenter image description hereenter image description here

这是我的代码

#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

获得的输出是同一个单词本身。

我不明白为什么会发生这种情况。
除此之外,如果发现更多错误,请告诉我。

c++ string reverse
1个回答
-1
投票

您没有将

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 上。请避免将作业问题发布为图片。

© www.soinside.com 2019 - 2024. All rights reserved.