镜缘浮影 小人本住在 苏州的城外 家里有屋又有田 生活乐无边

那些年我们一起忘掉的C (八).字符统计排序

2016-11-23
wilmosfang
c
原文地址 http://soft.dog/2016/11/23/c-basic-08/

前言

多重分支的选择语句,可以用来进行统计,字符指针可以灵活地操作字符串


概要


字符统计并按序输出

输入一行字符串,找出其中大写字母、小写字母、数字以及其他字符的个数,然后将找出的结果按照大写字母、小写字母、数字以及其他字符的次序排列成一个新的字符串

代码注解

#include <stdio.h>
#define LENGTH 40

main()
{
	int upcase=0,lowcase=0,num=0,othercase=0; //定义4个变量用来存储字符统计的累计和
	char c[LENGTH],*p,upc[LENGTH],*up,lowc[LENGTH],*lp,numc[LENGTH],*np,oc[LENGTH],*op; //定义5个字符数组分别用来存储输入字符串、大写字符串、小写字符串、数字字符串、其它字符串共5种字符串,然后定义5个字符指针
	up=upc;
	lp=lowc;
	np=numc;
	op=oc; //将指针分别指向各种字符串数组
	printf("please input a string (less then %d chars):\n",LENGTH);
	scanf("%s",c); //将输入字符串存储到数组c
	for(p=c;*p != '\0';p++) //遍历c数组中字符串的每个字符,字符串在字符数组中是以'\0'结尾的,所以读到了'\0',就代表读完了所有字符串
	{
		if ( *p >= 'A' && *p <= 'Z')
			{
				upcase++; //如果为大写,就将大写计数器加1
				*up=*p;   //将字符保存到up指针指向的位置,即upc字符数组中
				up++;	  //将up指针往后移动一个单元
			}      
		else if(*p >= 'a' && *p <= 'z') 
			{
				lowcase++;
				*lp=*p;
				lp++;     //统计小写字符的个数,并且保存到数组中
			}
		else if(*p >= '0' && *p <= '9')
			{
				num++;
				*np=*p;
				np++;    //统计数字字符的个数,并且保存到数组中
			}
		else 
			{
				othercase ++;
				*op=*p;
				op++;    //统计数字字符的个数,并且保存到数组中
			}
	}
	*up='\0';
	*lp='\0';
	*np='\0';
	*op='\0';   //将各个字符序列后面加一个'\0',以示字符串的终结
	
	printf(" total upcase is :%d\n total lowcase is :%d\n total number is :%d\n total othercase is :%d\n",upcase,lowcase,num,othercase); //分别输出计数值
	printf("the last string is %s%s%s%s\n",upc,lowc,numc,oc);   //按照大写字符,小写字符,数字字符,其它字符的顺序进行输出
	return 0;
}

思路

将输入字符串进行保存,然后遍历,逐个判断累计与累积

基础知识点

  • 数组的定义
  • 指针的用法
  • 输入输出函数的用法
  • 多重分支的选择
原文地址 http://soft.dog/2016/11/23/c-basic-08/

评论