zoukankan      html  css  js  c++  java
  • 读《C程序设计语言》笔记10

    编写按照ASCII字符表进行扩展的函数:

      函数基本要求:编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与a-z等类似的情况。作为前导和尾随的字符原样复制。

    这是课本练习3-3的题目要求:

      按照要求编写如下代码:

    #include<stdio.h>
    
    //expand:expand shorthand notation in s1 into string s2
    void expand(char s1[], char s2[])
    {
    	char c;
    	int i, j;
    	i=j=0; 
    	while((c=s1[i++])!='\0')		//fetch a char from s1[]
    		if('-'==s1[i] && s1[i+1]>=c)
    		{
    			i++;                    //skip '-' 
    			while(c < s1[i])		//expand shorthand
    				s2[j++]=c++;
    		}
    		else
    			s2[j++]=c;
    	s2[j]='\0';
    }
    
    int main()
    {
    	char s1[]="a-f-k0-7";
    	char s2[100]="";
    	expand(s1, s2);
    	printf("扩展后的字符串为:%s\n",s2);
    	system("pause");
    	return 0;
    }
    

    运行结果如下:

     

       百度了下扩展字符串,csdn上有人提到有公司笔试题类似这个题目,但是提出了更多的要求:要求能完成将S1中字符串按照ASCII表中顺序展开后保存在S2中,S1中可能包含字母(字母不区分大小写),数字和"-",如果遇到"-",将其去除.
    例: S1 S2
       a-f-k abcdefghijk (可以假设S1中的字母都是升序排列的)
       -d-g3-7 defg34567
       a-D-4-6- abcd456
      另外S2在此函数外未定义。

      链接:http://topic.csdn.net/u/20080219/15/e5ee5513-b40b-4947-9596-964fedeec151.html

      稍后按要求修改程序更新。

      修改程序后源代码如下:

    #include <stdio.h> 
    #include <string.h>
    //lower s1
    void lower(char s1[])
    {
    	int i=0;
    	for(; i<=strlen(s1); i++)
    	{
    		if(s1[i]>='A' && s1[i]<='Z')
    			s1[i]+='a'-'A';
    	}
    }
    //expand:expand shorthand notation in s1 into string s2
    void expand(char s1[], char s2[])
    {
    	char c;
    	int i, j;
    	i=j=0;
        lower(s1); 
    	while((c=s1[i++])!='\0')		//fetch a char from s1[]
    		if('-'==s1[i] && s1[i+1]>=c)
    		{
    			i++;
    			while(c <= s1[i])		//expand shorthand
    				s2[j++]=c++;
    		}
    		if(s1[i]!= '-')            //修改这里后,上面的while循环要修改,扩展
    			s2[j++]=c;             //的中间部分及尾部均要在while中完成输入到s2                                                                                             
    	s2[j]='\0';
    }
    
    int main()
    {
    	char s1[]="-a-D-4-8-";
        char s2[100]="";
    	expand(s1, s2);
    	printf("扩展后的字符串为:%s\n",s2);
    	system("pause");
    	return 0;
    }
    

    执行结果如下:(测试用例用的是最复杂的那个)

      

    不过,**s2,和函数外未定义s2,怎么处理...

  • 相关阅读:
    bootstrap3在IE8下导航不显示,自动识别成手机模式
    根据href给当前导航添加样式
    transform 图标旋转,IE8、IE7不兼容
    Responsive响应式设计
    JSON和JSONP的区别,以及使用方法
    移动前端框架,require.js压缩
    编写灵活、稳定、高质量的 css代码的规范
    javaScript 时间转换,将后台返回的时间为一串数字转成正常格式
    静态布局、自适应布局、流式布局、响应式布局、弹性布局等的概念和区别
    流式布局响应式布局
  • 原文地址:https://www.cnblogs.com/wangzhiyu811/p/2107584.html
Copyright © 2011-2022 走看看