1

我已尽力修复我的逻辑,但我无法检测到错误。我不能使用 [] 或任何其他高级功能,因为我还没有介绍它们。如果可以的话,请告诉我我的错误。请不要给我负分,因为我已经尽力了,我的错误没有意义!谢谢。

该脚本应该反转输入字符串:例如:hi to ih。

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;

void ReverseString(string &aString);

int main(){
    string info;
    cout << "What's your string?" << endl;
    getline(cin, info);
    cout << info << " compare with: " << endl;
    ReverseString(info);
    cout << info << endl;
    system("pause");
    return 0;
}

void ReverseString(string &aString)
{

    for(int i = 0; i < aString.length(); i++)
    {

        int u = aString.length() - 1 - i;
        string temp = "";
        temp += aString.at(aString.length() - 1 - i); 
        if(u == 0 )/* when aString.length() - 1 - i == 0, the last char will have been processed*/
        {
        aString = temp; /*store temp into aString; when its value changes, it is passed     into info's value*/
        }


    }

}
4

3 回答 3

2

您的问题是,每次运行 for 循环时ReverseString(),您都在重新初始化temp变量,删除您已经保存在字符串中的所有内容。如果我对 ReverseString 函数执行此操作,您的程序将按预期工作:

void ReverseString(string &aString)
    string temp = "";

    for(int i = 0; i < aString.length(); i++)
    {

        int u = aString.length() - 1 - i;
        temp += aString.at(aString.length() - 1 - i); 
        if(u == 0 )/* when aString.length() - 1 - i == 0, the last char will have been processed*/
        {
        aString = temp; /*store temp into aString; when its value changes, it is passed     into info's value*/
        }
于 2013-11-12T19:08:24.327 回答
1

您应该保持简单,您想要查看旧字符串的最后一个字符并将其放在新字符串的末尾。因此,不是从 0 循环到 end,而是从 end 循环到 0。但是你应该在循环之前声明你的新字符串,因为如果你在循环内这样做,你总是会在每次迭代后丢弃内容。

string newString;
for(int i = aString.length() - 1; i > 0; i--) {
    newString.append(aString.at(i));
}
于 2013-11-12T18:58:45.007 回答
1

经典习语涉及交换和维护两个索引:

void
ReverseString( std::string& target )
{
    int bottom = 0;
    int top = target.size();
    while ( top > bottom ) {
        -- top;
        char tmp = target[top];
        target[top] = target[bottom];
        target[bottom] = tmp;
        ++ bottom;
    }
}

(实际上,我会std::swap在循环中使用,但我想这也被禁止了。)

这可以完成工作,并避免额外的中间字符串。

于 2013-11-12T19:10:23.433 回答