gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:49:31 25 4
gpt4 key购买 nike

作为 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;
}

关于c++ - 为什么我的代码不能在 C++ 中反转字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61390375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com