-2

我对编程很陌生,所以这些都不是正确的。我只是在试图获得我(最终)达到的效果。练习比什么都重要,但我想知道是否有其他方法可以做到这一点。

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str1="Don't even think about it!";
    string str2;
    string str3;
    string str4 = "";

    for (int i = 0; i < str1.length(); i++){
        str2 = str1.substr (0, str1.length()-i);
        cout << str2 << str4;

        for (int x = str2.length() - 1; x >= 0; x--){
                str3 = str1[x];
                cout << str3;
        }

        str4 = str4 + "  ";
        cout << "\n";
    }
    getch();
    main();
    return 0;
    }

我的问题是:有没有办法让str3在它倒退之后成为它自己的字符串,然后我可以证明它是正确的,而不是用str4添加空格?

4

3 回答 3

3

为了得到一个反转的字符串,只需将反向迭代器传递给一个新字符串的构造函数:

#include <iostream>
#include <string>
int main() {
    std::string s = "this is a test";
    std::string s_reversed(s.rbegin(), s.rend());
    std::cout << s << "\n" << s_reversed << "\n";
}

输出是:

$ g++ test.cc && ./a.out
this is a test
tset a si siht

适用于您的问题:

#include <iostream>
#include <string>
int main() {
    std::string s = "this is a test";
    for (auto i = s.length(); i > 0; i--) {
        std::cout << s;
        std::cout << std::string(s.rbegin(), s.rend());
        std::cout << '\n';
        s[i-1] = ' ';
    }
}

请注意,标准库中还有一种算法可以反转容器,例如字符串:std::reverse()

以供参考:

于 2013-07-09T07:24:57.460 回答
2

你可以试试这个:用空格替换字母,然后反转字符串。将修改后的字符串与它的反面连接起来并打印出来。

std::string reverse(std::string str)
{
    std::reverse(str.begin(), str.end());
    return str;
}

int main()
{
    std::string str = "Don't even think about it!";

    size_t N = str.length();
    for (size_t i = 1; i < N; i++)
    {   
        std::cout << str << reverse(str) << std::endl;
        str.replace(N-i,1, " ");
    }

    return 0;
}
于 2013-07-09T07:00:17.310 回答
0

首先,我将重命名变量,以便更清楚您要实现的目标。相信我,在两个月内你不会知道这段代码到底做了什么。建议:

str1 -> 基字符串

str2 -> forwardsClippedString

str3 -> 向后剪辑字符串

str4 -> 间隙字符串

也许这些名字甚至都不好,但我认为它们比 str1、...、str4 更好。

然后我会做一个单独的内部循环方法。之后,为外部 for 循环创建一个单独的方法 - 是的,main() 根本不应该复杂。

最后,我建议不要递归调用 main,而是做一个 while 循环。如果你愿意,一个无限的(但如果一个键退出循环会很好)。

于 2013-07-09T07:00:43.640 回答