编程练习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函数还是比较重要的,有时间再看看。

posted on 2012-09-10 17:41  lyncre  阅读(187)  评论(0)    收藏  举报

导航