gpt4 book ai didi

c++ - 使用 char * 和字符串类反转字符串

转载 作者:行者123 更新时间:2023-11-27 22:56:37 25 4
gpt4 key购买 nike

我尝试通过指针遍历来反转字符串。逻辑很简单,我有两个指向 char 的指针,其中一个 head 指向字符串的第一个 char。另一个 tail 指向字符串的倒数第二个字符(在 \0 之前)。然后逐字符交换。 C 风格它工作得很好,但 C++ 风格不起作用。我想知道它的原因。

C 风格

#include <iostream>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
using std::string;

void reverse(char *str)
{
char *tail, *head;
head = &str[0];
tail = &str[strlen(str)];

cout << "String inverted is: ";

while ((head!=tail)&&(head!=--tail))
{
char temp=*head;
*head++=*tail;
*tail=temp;
}
}

int main(int argc, char const *argv[])
{
char str[100];
cout << "Enter a string: ";
cin.getline(str,100);
reverse(str);
cout << str;
cout <<"\n";

return 0;
}

C++ 风格

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;

void reverse(string str)
{
char *tail, *head;
head = &str[0];
tail = &str[str.size()];

cout << "String inverted is: ";

while ((head!=tail)&&(head!=--tail))
{
char temp=*head;
*head++=*tail;
*tail=temp;
}
}

int main(int argc, char const *argv[])
{
string str;
cout << "Enter a string: ";
getline(cin,str);
reverse(str);
cout << str;
cout <<"\n";

return 0;
}

最佳答案

您没有通过引用将字符串传递给 reverse。您当前正在传递字符串的拷贝。

使reverse有这个原型(prototype):

void reverse(string& str)

关于c++ - 使用 char * 和字符串类反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375362/

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