将后面的字符串作为自己的字符串?

时间:2013-07-09 06:39:55

标签: c++

我是编程新手,所以这一切都不对。我只是在试图获得我(最终)实现的效果。更多的是练习而不是其他任何东西,但我想知道是否还有其他方法可以做到。

#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添加空格?

3 个答案:

答案 0 :(得分: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()

供参考:

答案 1 :(得分:2)

你可以试试这个: 替换空白字母,然后反转字符串。 Concat修改后的字符串与其相反并打印出来。

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

答案 2 :(得分:0)

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

str1 - &gt;即basestring

str2 - &gt; forwardsClippedString

str3 - &gt; backwardsClippedString

str4 - &gt; gapString

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

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

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