练习3-3

原创 2004年09月16日 00:21:00


#include <stdio.h>
#include <stdlib.h>


/*
编写函数char *expand(const char *ss,char *ds),将字符串ss中类似于a-z一类的速记符号在字符串ds
中扩展为等价的完整列表abcdef...z.此函数可以处理大小写字母和数字,并可以处理
a-b-c,a-z0-9与-a-z等类似的情况.作为前导和尾随的-字符原样排印.
给出几个范例:
a-f    >  abcdef
f-a    >  fedcba
a-f-a  >  abcdefedcba
a-A    >  a-A
a-9-0  >  a-9876543210
a--b   >  a--b
-a-c   >  -abc
a-a    >  a-a
其中 > 右边的字符为经过转换后的字符
*/
char *expand(const char *ss, char *ds)
{
 char *ds_head=ds;
 const char *iter,*iter_l;
 char temp;

 if(ss==NULL)return  NULL;
 if(ds==NULL)return  NULL;/****异常!!!*******/
 if(ss==ds  )return  NULL;/*错误,不能通过ds来修改ss,保护原来的ss*/
 /**********************************************************/
 if(*ss=='-')*ds++=*ss++;/*当串第一个位置就是'-'时*/
 for(;*ss!='/0';ss++)
 {
  if(*ss=='-'){
   iter=ss-1; iter_l=ss+1;   

   if(*iter_l>='0' && *iter_l<='9'   &&
        *iter>='0' && *iter<='9'  &&
     *iter!=*iter_l   )
   {/*-数字***************
    *********************/
    if(*iter<*iter_l){/*升序 0-9*/
     --ds;
     for(temp=*iter;temp<*iter_l;temp++){
      *(ds++)=temp;
     }
     continue;
    }
    /*降序 9-0 */
    --ds;
    for(temp=*iter;temp>*iter_l;temp--){
     *(ds++)=temp;
    }
    continue;
   }/*数字结束*************
             **********************/
   else if(*iter_l>='a'&&*iter_l<='z' &&
        *iter>='a'  &&*iter<='z'   &&
     *iter!=*iter_l)
   {/*-小写字母**********
    ********************/
    if(*iter<*iter_l){/*升序 a-z */
     --ds;
     for(temp=*iter;temp<*iter_l;temp++){
      *(ds++)=temp;      
     }
     continue;
    }
    /*降序 z-a  */
    --ds;
    for(temp=*iter;temp>*iter_l;temp--){
     *(ds++)=temp;
    }
    continue;
   }/******小写字母结束****
    **********************/
   
   else if(*iter_l>='A'&&*iter_l<='Z'  &&
        *iter>='A'  &&*iter<='Z'    &&
     *iter!=*iter_l)
   {/*-大写字母**********
    ********************/
    if(*iter<*iter_l){/*升序 A-Z  */
     --ds;
     for(temp=*iter;temp<*iter_l;temp++){
      *(ds++)=temp;
     }
     continue;
    }
    /*降序 Z-A  */
    --ds;
    for(temp=*iter;temp>*iter_l;temp--){
     *(ds++)=temp;
    }
    continue;
   }/****大写字母结束*****
    *********************/

   else{/*都不是,则复制-*/
    *(ds++)='-';    
   }

  }/*if结束 */
  else{/*照原样复制*/
   *(ds++)=*ss;
  }
 }/*for结束*/


 /*ds最后的位置加上'/0'*/
 *ds='/0';

 return ds_head; 
}
/*
这个函数中有一段程序虽可用内联写,但考虑到参数传递代来的浪费,就没写了,所以有点冗余
*/
int main(void)
{
 char a[100000]="--------a-zz-aA-ZZ-A0-99-09-aa-b--------a";
 char b[100000];
 char *c;
 printf("1:%s/n",a);
 c=expand(a,b);
 printf("2:%s/n",c);
 printf("3:%s/n",expand(a,b));
 
 system("pause");

 return 0;
}

《C程序设计语言》练习3-3

题目:编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0...
  • HugoChouGT
  • HugoChouGT
  • 2012年10月28日 21:06
  • 581

C程序设计语言练习3-3

/* 编写函数expand(s1,s2),将字符串s1中类似于a-z一类的速记符号在字符串s2 中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字母和数字,并可以 处理a-b-c、a-z...
  • cerci0304
  • cerci0304
  • 2012年06月26日 14:51
  • 625

《C程序设计语言》练习 3-3

练习 3-3 编写函数 expand(s1, s2),将字符串 s1 中类似于 a-z 一类的速记符号 在字符串 s2 中扩展为等价的完整列表 abc…xyz。该函数可以处理大小写字母和数字,并可...
  • qq_33685612
  • qq_33685612
  • 2017年12月29日 17:26
  • 40

习题3-3 数数字(Digit counting)

#include #include #include #define maxn 1000000 using namespace std; int main() { int a[1001...
  • yqb514723273
  • yqb514723273
  • 2015年07月16日 21:02
  • 567

小紫书 习题 3-3(UVA 1225) 数数字(Digit Counting)

一开始想了想,没有什么好的办法,以为要用什么科技。 然后没有什么想法,就去网上查题解,原来暴力打表就可以… 以后还得看数据范围分析时间空间复杂度啊… 想复杂了…本来就是一道水题 AC代...
  • code12hour
  • code12hour
  • 2015年08月07日 10:57
  • 569

算法导论(第三版) 第三章思考题

http://www.cnblogs.com/Jiajun/archive/2013/05/06/3063574.html 3-1 a. P(n)=∑i=0daini=n...
  • corpsepiges
  • corpsepiges
  • 2015年04月22日 13:16
  • 1391

习题3-3 数数字 UVa1225

#include #include #include #define max 40000+10 char s[max]; int main() { int T; scanf("%d", &T); ...
  • u014800748
  • u014800748
  • 2014年06月20日 17:28
  • 826

程序3-3 蛇形填数

蛇形填数 在n*n的方阵中填入1,2,3...n*n,要求填成蛇形.例如,n=4时的方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 代码如下: #i...
  • hurmishine
  • hurmishine
  • 2016年03月12日 23:39
  • 658

例题3-3 回文词(Palindromes)

#include #include #include #include const char* rev="A 3 HIL JM O 2TUVWXY51SE Z 8 "; const...
  • yqb514723273
  • yqb514723273
  • 2015年07月16日 21:15
  • 122

《C程序设计语言》学习笔记——练习3-3

在写程序之前感觉很多细节没想清楚,写出来之后就发现有些是不需要考虑太多,应该先把主体写出来,把一些细致的地方放到下一步的调试中去。 /* 练习3-3 编写函数expand(s1,s2),将字符串s1...
  • fiveyes
  • fiveyes
  • 2015年10月26日 11:05
  • 220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:练习3-3
举报原因:
原因补充:

(最多只允许输入30个字)