题目:输入字符串以'#'结束:字母全变为大写放入数组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;
}

6889

被折叠的 条评论
为什么被折叠?



