我是编程新手,所以这一切都不对。我只是在试图获得我(最终)实现的效果。更多的是练习而不是其他任何东西,但我想知道是否还有其他方法可以做到。
#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添加空格?
答案 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循环。如果你愿意,这是一个无限的(但如果一个键退出循环会很好)。