gpt4 book ai didi

C++只用一个字符串反转一个字符串

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

我试图只使用一个字符串来反转一个字符串,但是当我输出该字符串时,它缺少一个字母。是否有我不知道的内容被覆盖?这是我的代码:

#include <iostream>
using namespace std;



int main() {
string d = "jakejosh"; //11
char temp = '\0';
int j = d.size()/2;
for (int i=d.size()/2; i> 0; i--) //5
{
temp = d[i+j];
d[j+i] = d[j-i];
d[j-i] = temp;
}

cout << d << endl;
return 0;
}

输出是:ttam olle

输出应该是:ttam olleh

最佳答案

当字符串的大小为偶数时,代码是错误的。例如,如果大小等于 2,则 size()/2 等于 1,在循环中你将得到 d[i+j] 等于 d[size()/2 + size()/2]等于 d[2] 而索引的有效范围是 [0,1]您还应该包括标题 <string>你可以使用标准函数 std::swap

最简单的方法如下

#include <iostream>
#include <string>

int main()
{
std::string s = "hello matt";

s = std::string( s.rbegin(), s.rend() );

std::cout << s << std::endl;

return 0;
}

如果您想自己编写循环,那么代码可以如下所示

#include <iostream>
#include <string>

int main()
{
std::string s = "hello matt";

for ( std::string::size_type i = 0; i < s.size() / 2; i++ )
{
char c = s[i];
s[i] = s[s.size()-i-1];
s[s.size()-i-1] = s[i];
}

std::cout << s << std::endl;

return 0;
}

或者您可以编写一些奇特的解决方案。:)例如

#include <iostream>
#include <string>
#include <utility>

int main()
{
std:: string s = "Jake Smith";

std::cout << s << std::endl;

for ( std::string::size_type i = 0, j = s.size(); j - i > 1; i++ )
{
std::swap( s[i], s[--j] );
}

std::cout << s << std::endl;

return 0;
}

程序输出为

Jake Smith
htimS ekaJ

或者你可以尝试写一个递归函数。

您终于可以使用标准算法了 std::reverse在 header 中声明 <algorithm> .

关于C++只用一个字符串反转一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217156/

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