字符串编程

题目:输入字符串以'#'结束:字母全变为大写放入数组a中,数字放入数组b中并有序输出,标点放入数组c中逆序输出。

方法一:

#include<stdio.h>
#define N 10
int main()
{
	char a[N],b[N],c[N]={0},ch;
	char *pa=NULL;
	char *pb=NULL;
	char *pc=NULL;
	char *pfa=NULL;
	int i,a1=0,b1=0,c1=0;
	pa=a;
	pb=b;
	pc=c;
	while('#'!=(ch=getchar()))
	{
		if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
		{
			*pa++=ch;
			a1+=1;
		}
		else if(ch>='0'&&ch<='9')
		{
			*pb++=ch;
			b1+=1;
		}
		else
		{
			*pc++=ch;
			c1+=1;
		}
	}
	pa=a;
	pfa=a;
	while(pa-pfa<a1)
	{
		if(*pa>='a'&&*pa<='z')
			*pa-=32;
		pa++;
	}
	pa--;
	for(i=0;i<a1;i++)
		printf("%c",*pa--);
	putchar(10);
	printf("the number of a arry are : %d\n",a1);
	pb--;
	for(i=0;i<b1;i++)
		printf("%c ",*pb--);
	putchar(10);
	printf("the number of b arry are : %d\n",b1);
	puts(c);
	printf("the number of c arry are : %d\n",c1);
	return 0;
}

方法二:

#include <stdio.h>
#define N 30

int main()
{
	char a[N] = {0},
		 b[N] = {0},
		 c[N] = {0};
	char ch = 0;
	int an = 0,
	    bn = 0,
	    cn = 0;
	int i,j;
	puts("input your string:");
	while(an + bn + cn < N && '#' != (ch = getchar()))
	{
		if(ch <= 32)
			continue;
		if(ch >= 'A' && ch <= 'Z')
			a[an ++] = ch;
		else if(ch >= 'a' && ch <= 'z')
			a[an ++] = ch - 32;
		else if(ch >= '0' && ch <= '9')
			b[bn ++] = ch;
		else
			c[cn ++] = ch;
	}
	for(i = 0; i < bn - 1; i ++)
	{
		for(j = 0; j < bn - i - 1; j ++)
		{
			if(b[j] > b[j + 1])
			{
				b[j] ^= b[j + 1];
				b[j + 1] ^= b[j];
				b[j] ^= b[j + 1];
			}
		}
	}
	i = 0;
	j = an -1;
	while(i < j)
	{
		a[i] ^= a[j];
		a[j] ^= a[i];
		a[i ++ ] ^= a[j --];
	}
	printf("length:\t%d\tstring:\t%s\n",an,a);
	printf("length:\t%d\tstring:\t%s\n",bn,b);
	printf("length:\t%d\tstring:\t%s\n",cn,c);
	return 0;
}

你可能感兴趣的:(c,linux,字符串编程)