编程练习1
题目:找出一个字符串中是否包含相同的子字符串,要求子字符串的长度大于等于2
1 #include <iostream> 2 using namespace std; 3 4 #define MAXSIZE 100 5 6 void invert(int dig,char *str) 7 { 8 char tmp[MAXSIZE]={0}; 9 int i=0; 10 while(dig) 11 { 12 tmp[i++]=dig%10+'0'; 13 dig=dig/10; 14 } 15 tmp[i]='\0'; 16 17 int len=strlen(tmp); 18 char tmp2[MAXSIZE]={0}; 19 for(i=0;i<len;i++) 20 tmp2[i]=tmp[len-i-1]; 21 tmp2[i]='\0'; 22 23 strcpy(str,tmp2); 24 } 25 void func(char str[],int n) 26 { 27 int i,j,len=strlen(str); 28 bool flag=0; 29 char* s; 30 char s1[MAXSIZE]={0},s2[MAXSIZE]={0}; 31 for(i=0;i<n-2;i++) 32 { 33 for(j=2;j<n;j++) 34 { 35 strcpy(s1,str+j+i); 36 strncpy(s2,str+i,j); 37 s2[j++]='\0'; 38 if(strlen(s2)>strlen(s1)) 39 { 40 break; 41 } 42 if((s=strstr(s1,s2))!=NULL) 43 { 44 if(!flag) 45 { 46 cout<<"True!"<<endl; 47 } 48 flag=1; 49 cout<<"The substring is:"<<s2<<endl; 50 } 51 } 52 } 53 if(!flag) 54 { 55 cout<<"Flase"<<endl; 56 } 57 return; 58 } 59 60 int main() 61 { 62 int dig; 63 cin>>dig; 64 char str[MAXSIZE]; 65 66 invert(dig,str); 67 68 int n=strlen(str); 69 func(str,n); 70 71 return 0; 72 }
这题是华为今年的上机题,我未能实现的功能是当输入大数时,比如111122221111,程序不能正常运行,不能直接来个double,因为运行到tmp[i++]时会提示说不能不能讲存储char类型的数组存储为double类型(?),我认为ivert函数还是比较重要的,有时间再看看。
思想的高度决定事情的成败!
浙公网安备 33010602011771号