使向后的字符串成为自己的字符串
Make a backward string its own string?
我是编程新手,所以这些可能都不对。我只是在胡搅蛮缠,试图达到我(最终)达到的效果。更多的是练习,但我想知道是否还有其他方法可以做到
#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。如果你愿意的话,这是一个无限的(但如果有一个键退出循环那就太好了)。
相关文章:
- 在 cpp 自己的版本中对字符串进行哈希处理
- 如何为C++映射创建自己的字符串比较对象
- 尝试编写我自己的字符串类在 gcc 中出现异常
- 使用 const char * 与 char * 创建自己的字符串
- 如何用自己的定界符分开字符串
- C++,使用自己的条件搜索文件中的字符串
- 如何使用新字符串而不是分配器创建自己的字符串类型向量?
- 在 C++ 中实现自己的字符串类
- 运算符重载 (+=,=) 用于自己的字符串
- 我可以在"setDefaultButton"中使用我自己的用户定义字符串吗
- 读取和分析文件,将解析的字符串的每个部分分配给其自己的变量
- 我可以在C++中使用 != 和 == 进行字符串比较,而无需编写自己的字符串
- 创建我自己的strlen和子字符串函数
- 使向后的字符串成为自己的字符串
- 编写我自己的字符串类"reference to ‘string’ is ambiguous"但出现编译错误
- 不能在标准向量中插入自己的结构,但是字符串可以
- 如何在C++中将字符串中的元素转换为它自己的字符串?
- C++ - 为学校构建自己的字符串类,无法正确重载<运算符
- 创建了自己的字符串类——重载赋值操作符和析构函数的错误
- 如何拥有自己的没有公共构造函数的字符串类