首页 > 代码库 > C语言每日一题之No.9

C语言每日一题之No.9

      再做决定之前,我还是做好自己该做的。我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦。尊敬的女王陛下,请接题:

一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规则插到字符串a中,最后输出”abdefghjkmnptwy”。

二.思路:既然是已经排好序的,就用二分法查找的思想

            将字符串s中的每个字符依次作为key拿来和字符串a做比较并且插入

三.程序

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define SIZE 50
 5 
 6 void InsertStr(char *s,char *a,int low,int high)
 7 {
 8     int mid = 0;
 9 
10     while(*a)
11     {  
12        mid = (low+high)/2;
13 
14        //当mid位置字符<*a<mid+1位置字符或者mid位置字符等于*a时
15        if((s[mid]<*a) && (s[mid+1]>*a) || s[mid]==*a)
16        {
17            for(int j=mid+1;*(s+j);j++)
18            { 
19                s[j] = *a;//把*a插入到字符串s中mid+1的位置
20                s[j+2]=s[j+1];//并且字符串s从mid+2开始的位置全部往后挪一个位置  
21                high = high +1;//若每插入一个*a字符,则右区间要加1
22            }
23        }
24        else if(s[mid] >*a)
25        { //若mid位置对应的字符大于*a,则右区间变为mid  
26            high = mid;
27            InsertStr(s,a,low,high);
28        }
29        else if(s[mid] <*a)
30        { //若mid位置对应的字符小于*a,则左区间变为mid 
31            low = mid;
32            InsertStr(s,a,low,high);
33        
34        }
35 
36        a++;
37     }
38 
39 
40 }
41 
42 
43 int main(void)
44 {
45     char s[SIZE]={0};
46     char a[SIZE]={0};
47     
48     printf("Please input the s string:\n");
49     scanf("%s",s);
50     printf("Please input the a string:\n");
51     scanf("%s",a);
52 
53     InsertStr(s,a,0,strlen(s));
54     printf("%s",s);
55 
56     return 0;
57 
58 }

三.编译运行

   程序出错

四.分析问题

 

    那,鉴于你有这样的毅力,明天犒劳你一个又红又脆的苹果+一盒特仑苏纯牛奶哇~