C++ 这个c+有什么问题+;反向字符串函数 void reverse(字符s[]){ int len=strlen(s); int j=len-1; 对于(int i=0;i函数: char const* str = "I cannot be written to"; #包括 #包括 #包括 int main(){ std::string str=“Hello world”; 反向(str.begin(),str.end()); std::cout

C++ 这个c+有什么问题+;反向字符串函数 void reverse(字符s[]){ int len=strlen(s); int j=len-1; 对于(int i=0;i函数: char const* str = "I cannot be written to"; #包括 #包括 #包括 int main(){ std::string str=“Hello world”; 反向(str.begin(),str.end()); std::cout,c++,string,C++,String,为了向后兼容,C++允许省略常量,但是文本仍然是常量 最后,C++已经有了反转< /代码>函数: char const* str = "I cannot be written to"; #包括 #包括 #包括 int main(){ std::string str=“Hello world”; 反向(str.begin(),str.end()); std::cout我想问题在于如何调用它,可能是字符串文字,类似于: #include <algorithm> #include <

为了向后兼容,C++允许省略
常量
,但是文本仍然是常量

<>最后,C++已经有了<代码>反转< /代码>函数:

char const* str = "I cannot be written to";
#包括
#包括
#包括
int main(){
std::string str=“Hello world”;
反向(str.begin(),str.end());

std::cout我想问题在于如何调用它,可能是字符串文字,类似于:

#include <algorithm>
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello world";
    std::reverse(str.begin(), str.end());
    std::cout << str << std::endl;
}
或: char*string=“这是一个字符串”; 反向(字符串)

或者其他一些小的变化。在任何情况下,您都试图写入一个字符串文本,这会给出未定义的行为

既然您明显使用C++,我会考虑使用<代码> STD::String < /C> >:

reverse("This is a string");
void反向(std::string&s){
int j=s.长度()-1;

对于(int i=0;i您是在
const char*
或字符串文本上调用它

你想倒转吗

void reverse(std::string &s) { 
    int j=s.length()-1;
    for (int i=0; i<j; i++, j--) {
        // ..
    }
}

您需要从不可写字符串创建一个新字符串,并将其反转。您可以使用
strdup

char *s = "foo";
reverse(s);

还注意到你的问题是用C++来标记的,所以你应该使用<代码> STD::String < /C> >

你是否通过了代码> RetrySe(/Cys>)?编译时常数字符串?你能发布你所得到的错误吗?如果你真的很喜欢用char数组作为字符串,使用类似char C[] =“某事”的东西,而不是char *c=“什么";This.std::string和std::reverse是正确的方法。事实上,正如不久前有人向我指出的那样,C++03正式反对使用char*来指向文本。参见附录D.4我不想使用内置的反向方法。必须为某些pof编写自己的字符串反向。@alee:当然可以。代码的基本逻辑是正确的,它仍然将与C++字符串一起工作。我的答案的重要一点是第一部分。
reverse("foo");
char *s = "foo";
reverse(s);
char *s = strdup("foo");
reverse(s);
free(s, strlen(s));