今天突发奇想,想要记录一下遇到的一些经典操作,以备后续使用。
下面是共有两种写法,分别是循环方法和递归方法:
//输入一个字符串(包含空格),本程序能够输出所有的子串
#include<iostream>
#include<cstring>
using namespace std;
//用循环的方法找子串
void print_substr_loop(string str)
{
int n = str.length();
// 外层循环控制子串的起始位置
for (int i = 0; i < n; i++) {
// 内层循环控制子串的长度
for (int j = i + 1; j <= n; j++) {
// 打印从索引i到索引j-1的子串
cout << str.substr(i, j - i) << " ";
}
}
}
//用递归的方法找子串
void print_substr_recursion(string str, int index)//recursion递归
{
if (index == str.size()) {
return; // 基本情况:索引超出字符串长度时停止递归
}
// 打印从当前index开始到字符串末尾的所有子串
for (int i = index; i < str.size(); i++) {
cout << str.substr(index, i - index + 1) << " ";
}
// 递归调用,移动到下一个字符
print_substr_recursion(str, index + 1);
}
int main()
{
string str;
getline(cin,str);
//print_substr_loop(str);
print_substr_recursion(str,0);
return 0;
}