为什么我的代码在c++中不能反转字符串?

作为一个C++新手,我试着用它来反转一个字符串,可以用下面的方法

class Solution {
public:
    void reverses(string s,int begin,int end){
        char c;
        for(int i=begin,j=end-1;i<j;i++,j--){  
            c=s[i];  
            std::cout<<s[i]<<std::endl;
            s[i]=s[j];  
            s[j]=c;  
            std::cout<<s[j]<<std::endl;
        }  
    }
    string reverseLeftWords(string s, int n) {
        reverses(s,0,n);
        return s;
    }
};

但它给了我原始的字符串,但当我把它用在*char`中时,它就会给我一个原始的字符串。

void Reverse(char *s,int n){  
    for(int i=0,j=n-1;i<j;i++,j--){  
        char c=s[i];  
        s[i]=s[j];  
        s[j]=c;  
    }  
}  

int main()  
{  
    char s[]="hello";  
    Reverse(s,5);
    cout<<s<<endl;
    return 0;
}

它把olleh,他们之间有什么不同?

解决方案:

在第二个例子中,你使用了一个指向字符的指针,这意味着该函数是在改变原来的字符串数据,在原地改变,这就可以了。与第一个例子相比,在第一个例子中,你通过一个 std::string 的值(意味着该函数是在该字符串的副本上工作),在原地进行反转,然后丢弃结果。

如果你想使用一个 std::string 你可以通过引用或通过指针到对象来获取它。

void reverses(string& s,int begin,int end){
        char c;
        for(int i=begin,j=end-1;i<j;i++,j--){  
            c=s[i];  
            std::cout<<s[i]<<std::endl;
            s[i]=s[j];  
            s[j]=c;  
            std::cout<<s[j]<<std::endl;
        }  
    }

或者

void reverses(string* s,int begin,int end){
        char c;
        for(int i=begin,j=end-1;i<j;i++,j--){  
            c=(*s)[i];  
            std::cout<<(*s)[i]<<std::endl;
            (*s)[i]=(*s)[j];  
            (*s)[j]=c;  
            std::cout<<(*s)[j]<<std::endl;
        }  
    }

    string reverseLeftWords(string s, int n) {
        reverses(&s,0,n);
        return s;
    }

给TA打赏
共{{data.count}}人
人已打赏
未分类

在运行时创建HTML页面

2022-9-8 6:36:41

未分类

优化多个MySQL(子)查询

2022-9-8 6:47:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索