标签:acm 字符串处理 substrings hdu1238 字符串函数
2 3 ABCD BCDFF BRCD 2 rose orchid
2 2
char
*
strncpy
(
char
*dest,
char
*src,size_tnum);
这个与strcpy差别在于,它可以控制长度,当然这两者都可以通过控制
第二个数组的头位置来控制赋值起点。
/************************************** *************************************** * Author:Tree * *From :http://blog.csdn.net/lttree * * Title : Substrings * *Source: hdu 1238 * * Hint : 串的处理 * *************************************** **************************************/ #include <stdio.h> #include <string.h> char str[101][101]; int n; int find_str(int len,int index) { char s[101],pos[101],inv[101]; bool flag; int i,j,l; //将字符串拷贝出来 strcpy(s,str[index]); l=len; // 舍弃后面的 while(l>0) { flag = 0; for(i = 0; i <= len-l; ++i) { flag=1;//flag初始化为1 //正向字符串,将str中第i个位置,取l长度(舍弃前面的) strncpy(pos,s+i,l); //inv 为pos的逆序 for(j=0; j<l; j++) inv[j]=pos[l-j-1]; // 字符数组,最后\0,防止某些不必要的冲突 pos[l]=inv[l] =‘\0‘; for(j=0; j<n; j++) { if(strstr(str[j],pos)==NULL&&strstr(str[j],inv)==NULL) {flag=0;break;} } if(flag) break; } if(flag) break; --l; } return l; } int main() { int i,t,min_len,index; scanf("%d",&t); while(t--) { scanf("%d",&n); min_len = 101; for(i = 0; i < n; i++) { scanf("%s",str[i]); //找到最短的字符串 if(strlen(str[i])<min_len) { min_len = strlen(str[i]);//记录最短字串的长度 index = i;//记录最短字串的位置 } } printf("%d\n",find_str(min_len,index)); } return 0; }
标签:acm 字符串处理 substrings hdu1238 字符串函数
原文地址:http://blog.csdn.net/lttree/article/details/24839593