反转字符串-c++

Reversing a string - c++

本文关键字:-c++ 字符串      更新时间:2023-10-16

我正在完善我的C++,并进行一个关于反转用户输入的字符串的练习。下面是我的尝试,但没有成功。

有什么原因吗?

string userentry;
cout << "enter a string: ";
getline(cin, userentry);
int size = userentry.length();
for (int i = 0; i < size /2; i++)
{
    string tempvar1 = userentry.substr(i);
    string tempvar2 = userentry.substr(size - 1 - i);
    userentry.replace(i, i+1, tempvar2);
    userentry.replace(size - 1 -i, (size - 1 - i) + 1, tempvar1);
}
cout << userentry << endl;
return 0;

我感谢你的帮助。

从本质上讲,您正在向自身插入一个不断增长的字符串,覆盖越来越多的字符。我猜想你打算一次替换一个角色。

请尝试将replace()的长度参数设置为1,并且只指定临时变量的第一个字符。例如:

for (int i = 0; i < size /2; i++)
{
    string tempvar1 = userentry.substr(i);
    string tempvar2 = userentry.substr(size - 1 - i);
    userentry.replace(i, 1, tempvar2.substr(0, 1));
    userentry.replace(size - 1 -i, 1, tempvar1.substr(0, 1));
}

以下是显示您不断增长的字符串插入的结果:

enter a string: abcdef
Step 1
t1: abcdef
t2: f
ue: abcdef
first replace at 0, length 1 on data: abcdef, using: f
second replace at 5, length 6 on data: fbcdef, using: abcdef
Step 2
t1: bcdeabcdef
t2: eabcdef
ue: fbcdeabcdef
first replace at 1, length 2 on data: fbcdeabcdef, using: eabcdef
second replace at 4, length 5 on data: feabcdefcdeabcdef, using: bcdeabcdef
Step 3
t1: abbcdeabcdefdeabcdef
t2: bbcdeabcdefdeabcdef
ue: feabbcdeabcdefdeabcdef
first replace at 2, length 3 on data: feabbcdeabcdefdeabcdef, using: bbcdeabcdefdeabcdef
second replace at 3, length 4 on data: febbcdeabcdefdeabcdefbbcdeabcdefdeabcdef, using: abbcdeabcdefdeabcdef
results: febabbcdeabcdefdeabcdefabcdefdeabcdefbbcdeabcdefdeabcdef

好吧,我不确定你的这个应该如何工作,但我已经做了一个。

string userentry;
cout << "enter a string: ";
getline(cin, userentry);
int size = userentry.length();
string temp = "";//construscts a temporary string
for (int i = size-1; i >=0; i--){//we want to start at the end of the inputted string because that will be placed at the beggining of the temporary string
    temp.push_back(userentry[i]);//adds the last character to userentry
}
userentry = temp;//assign userentry to its reversed value
cout << userentry << endl;
return 0;