`
carolaif
  • 浏览: 71015 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

C程序设计语言(第二版)3-3

阅读更多

3-3 编写函数expand(s1,s2),将字符串s1中类似与a-z一类的速记符号在字符串s2中扩展成等价的完整列表abc...xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况

 

#include<stdio.h>
#include<string.h>

void expand(char* result,char* s2);

int main()
{
    char *s[] = { "a-d-", "a-b-c","z-a-", "-1-6-", 
                  "a-ee-a", "a-R-L", "1-9-1", 
                  "5-5", NULL }; 
    char result[100]=""; 
    int i = 0; 
     
    while ( s[i] ) { 
        expand(result, s[i]); 
      printf("Unexpanded: %s\n", s[i]); 
      printf("Expanded  : %s\n", result); 
		 printf("helloworld\n");
        ++i; 
    }
	return 0;
}

void expand(char * s1, char* s2)
{
	static char upper[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	static char lower[27]="abcdefghigklmnopqrstuvwxyz";
	static char digits[11] = "0123456789"; 

	int i=0;
	int j=0;
	char *start;
	char *end;
	char *p;
	while(s2[i]){
		switch(s2[i]){
		case '-':
			if(i==0 || s2[i+1]=='\0')
			{
				s1[j]='-';
				j++;
				i++;
				break;
			}
			else
			{
				if( (start = strchr(upper,s2[i-1])) && (end = strchr(upper,s2[i+1])))//如果不存在strchr()返回null
					;
				else if( (start = strchr(lower,s2[i-1])) && (end = strchr(lower,s2[i+1])))
					;
				else if( (start = strchr(digits,s2[i-1])) && (end = strchr(digits,s2[i+1])))
					;
				else{
					fprintf(stderr, "EX3_3: Mismatched operands '%c-%c'\n", s2[i-1], s2[i+1]); 
                    s1[j++] = s2[i-1]; 
                    s1[j++] = s2[i++]; 
                    break; 
				}

				p=start;
				while(p!=end){
					s1[j]=*p;
					if(start<end)
						p++;
					else
						p--;
					j++;
				}
				s1[j]=*end;
				j++;
				s1[j]='-';
				i=i+2;
			}
			break;
		default:
			if ( s2[i+1] == '-' && s2[i+2] != '\0' ) { 
                ++i; 
            } 
            else {      
                s1[j++] = s2[i++]; 
            } 
            break; 
		}
	}
	s1[j] = s2[i];
	i++;

}

 PS 本例中用到了string.h 中的strchr(str,c)函数,用于查找字符c在字符串str中首次出现的位置的指针,如果找不到,则返回null

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics