C语言-字符串
问题:
给出的区分大小写的字母字符的字符串,找到最大的字符串X,或者为X,或者其逆可以找到任何给定的字符串的子串
输入:
输入文件的第一行包含一个整数t(1 < = t < = 10),测试用例的数量,其次是每个测试用例的输入数据。每个测试用例的第一行包含一个整数(1 < = n < = 100),给定字符串的数量,其次是n行,每个代表一个字符串的最小长度1和最大长度100。之前和之后没有额外的空白字符串。
输出:
每个测试用例应该有一行包含发现的最大字符串的长度
样例输入:
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
样例输出:
2
2
解题代码中用到的处理字符串函数:
char
*
strncpy
(
char
*dest,
char
*src,size_tnum);
这个与strcpy差别在于,它可以控制长度,当然这两者都可以通过控制 第二个数组的头位置来控制赋值起点。
1 #include<stdio.h> 2 #include<string.h> 3 char str[101][101]; 4 int sum1;//每组测试数据中的字符串个数 5 int find_sub(int len,int index) 6 { 7 char s[101],pos[101],rev[101]; 8 int length; 9 int i,j; 10 int flag; 11 strcpy(s,str[index]); 12 length=len; 13 while(length>0) 14 { 15 flag=0; 16 for(i=0;i<=len-length;i++) 17 { 18 flag=1; 19 //得到正向的字符子串 20 strncpy(pos,s+i,length); 21 //得到逆向的字符子串 22 for(j=0;j<length;j++) 23 { 24 rev[j]=pos[length-j-1]; 25 } 26 //末尾加上结束符 27 pos[length]=rev[length]=‘\0‘; 28 //判断改组的所有字符串中是否有相应的子串 29 for(i=0;i<sum1;i++) 30 { 31 if(strstr(str[i],pos)==NULL&&strstr(str[i],rev)==NULL) 32 { 33 flag=0; 34 break; 35 } 36 } 37 if(flag)break; 38 } 39 if(flag) 40 break; 41 else 42 --length; 43 } 44 return length; 45 } 46 int main() 47 { 48 int sum;//测试的数据数量 49 int len_min; 50 int i; 51 int index;//记录最短子串的位置 52 scanf("%d",&sum); 53 while(sum--) 54 { 55 scanf("%d",&sum1); 56 len_min=101; 57 for(i=0;i<sum1;i++) 58 { 59 scanf("%s",str[i]); 60 //找到最短的字符串 61 if(strlen(str[i])<(len_min)) 62 { 63 len_min=strlen(str[i]); 64 index=i; 65 } 66 } 67 printf("%d\n",find_sub(len_min,index)); 68 } 69 return 0; 70 }
运行结果:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。