问题:
给出的区分大小写的字母字符的字符串,找到最大的字符串X,或者为X,或者其逆可以找到任何给定的字符串的子串
输入:
输入文件的第一行包含一个整数t(1 < = t < = 10),测试用例的数量,其次是每个测试用例的输入数据。每个测试用例的第一行包含一个整数(1 < = n < = 100),给定字符串的数量,其次是n行,每个代表一个字符串的最小长度1和最大长度100。之前和之后没有额外的空白字符串。
输出:
每个测试用例应该有一行包含发现的最大字符串的长度
样例输入:
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
样例输出:
2
2
解题代码中用到的处理字符串函数:
strcpy:
char * strcpy(char * strDest,const char * strSrc);
就是将后面的数组赋给前面。如果前面数组长度不够大,运行崩溃。
strncpy:
char
*
strncpy
(
char
*dest,
char
*src,size_tnum);
这个与strcpy差别在于,它可以控制长度,当然这两者都可以通过控制 第二个数组的头位置来控制赋值起点。
strlen:
extern unsigned int strlen(char *s);
这个就是返回s数组长度(不包括' ')
strstr:
extern char *strstr(const char *str1, const char *str2);
这个函数就是查找str2在str1中的位置,若不存在返回NULL。
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]='