2013-11-27 49 views
-2

我正在抛光我的C++,并在逆转用户输入的字符串进行锻炼。以下是我无法工作的尝试。颠倒一个字符串 - 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; 

我感谢任何帮助。

+3

描述你所相信的每一行呢。如果程序没有做到你认为的那样,那么其中一个描述是错误的。遍历调试器中的代码并验证每个描述符合实际行为;那个不是bug。 –

+2

@Blastfurnace:练习的目的不是要学习如何调用别人的字符串反向算法。我怀疑原始海报有迫切需要扭转一个字符串。 –

+0

如果我们坚持您在描述问题时提供的详细程度(“不起作用”),我们将不得不回答,“因为您显然在某处犯了一个错误”... – Spook

回答

-1

好吧,我不知道你有一个应该如何工作,但我已经做了一个。

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; 
0

本质上,你将一个正在增长的字符串插入本身,覆盖越来越多的字符范围。我认为你一次只想替换一个角色。

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

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