首页 > 代码库 > 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 }
三.编译运行
程序出错
四.分析问题
那,鉴于你有这样的毅力,明天犒劳你一个又红又脆的苹果+一盒特仑苏纯牛奶哇~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。