使向后的字符串成为自己的字符串

Make a backward string its own string?

本文关键字:字符串 自己的      更新时间:2023-10-16

我是编程新手,所以这些可能都不对。我只是在胡搅蛮缠,试图达到我(最终)达到的效果。更多的是练习,但我想知道是否还有其他方法可以做到

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

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

#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()

供参考:

  • http://en.cppreference.com/w/cpp/string/basic_string/basic_string
  • http://en.cppreference.com/w/cpp/string/basic_string/rbegin
  • http://en.cppreference.com/w/cpp/string/basic_string/rend
  • http://en.cppreference.com/w/cpp/algorithm/reverse

您可以尝试以下操作:将字母替换为空白,然后反转字符串。将修改后的字符串与它的反面拼接并打印。

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

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

str1->baseString

str2->forwardsClippedString

str3->backwardsClippedString

str4->gapString

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

然后我会制作一个单独的内循环方法。之后,制作一个单独的outer-for循环方法——是的,main()应该一点也不复杂。

最后,我建议做一个while循环,而不是递归地调用main。如果你愿意的话,这是一个无限的(但如果有一个键退出循环那就太好了)。