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; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读