C语言输出唯一的子串
题目描述
给一个字符串,求长度为m的所有不重复的子串。 比如字符串"aaab",我们求长度为2的子串,那么依次为"aa","aa","ab",那么不重复的子串为"aa","ab"
输入
第一行是一个整数K,表示样例的个数。 每个样例的第一行是一个整数m,表示所求子串的长度。 第二行是一个字符串,字符串全部由小写英文字母组成,长度不超过100。
输出
按字典序输出所有不重复子串,每个样例最后输出一个空行。
样例输入
2样例输出
2
aaab
【C语言输出唯一的子串】3
aaab
aa这道题可以定义一个二维数组用来存放字符串的所有子串,然后排序,最后一个个输出,遇到相同的只输出一个。
ab
aaa
完整代码
#include #include int main() {int k,i,j,len,n,l,m; char str[105]={0},a[102][101]={0},temp[100]; scanf("%d",&k); while(k--){n = 0; scanf("%d",&m); scanf("%s",str); len = strlen(str); for(i = 0; i <= len-m; i++){l = 0; for(j = i; j < i+m; j++,l++){a[n][l] = str[j]; //子串}n++; }for(i = 0; i < n; i++)//排序{for(j = i+1; j < n; j++){if(strcmp(a[i],a[j])>0){strcpy(temp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],temp); }}}for(i = 0; i < n; i++){if(strcmp(a[i],a[i+1])==0)//相同的只输出第一个continue; for(j = 0; j < m; j++)printf("%c",a[i][j]); printf("\n"); }printf("\n"); memset(str,'\0',sizeof(str)); memset(a,'\0',sizeof(a)); memset(temp,'\0',sizeof(temp)); }return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 你是我唯一去臻爱的理由(五)
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- C语言解方程的根和判断是否是闰年
- C语言的版本比较