字符的所有组合

本文介绍了一种使用C++实现的字符串子串打印算法,通过递进的方式从单个字符到多个字符逐步展示如何打印字符串的所有可能子串。算法首先处理单个字符的打印,随后扩展至任意长度的子串,最终归纳出一种通用的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
首先是打印一个字母的情况

    //一个字母
	for (int i = 0; i < s.size(); ++i)
	{
		cout << s[i] << endl;
	}

打印两个

//两个字母
	for (int i = 0; i < s.size(); ++i)
	{
		string w = "";
		w += s[i];
		int count = 1;
		for (int j = i + 1; j < s.size(); ++j)
		{
			w += s[j];
			count++;
			if (count == 2)
			{
				cout << w << endl;
				count = 1;
				w = s[i];
			}
		}
	}

接着是打印三个

//三个字母
	for (int i = 0; i < s.size(); ++i)
	{
		string w = "";
		w += s[i];
		int count = 1;
		for (int j = i + 1; j < s.size(); ++j)
		{
			w += s[j];
			count++;
			if (count == 3)
			{
				cout << w << endl;
				count = 1;
				w = s[i];
			}
		}
	}

最终归纳出答案
将一个字符的情况特殊对待,其他情况给一个通用的代码。

void func2(string s)
{
	//归纳出答案

	for (int i = 0; i < s.size(); ++i)
	{
		cout << s[i] << endl;
	}
	
	
	for (int x = 2; x <= s.size(); ++x)
	{
		for (int i = 0; i < s.size(); ++i)
		{
			string w = "";
			w += s[i];
			int count = 1;
			for (int j = i + 1; j < s.size(); ++j)
			{
				w += s[j];
				count++;
				if (count == x)
				{
					cout << w << endl;
					count = 1;
					w = s[i];
				}
			}
		}
	}
}

进行调用

int main()
{
	string s = "abcd";
	func2(s);
	return 0;
}

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值