这个问题实际上需要分成两个问题:
1.逆序输出 2.输出大写字母的数量
首先对第一个问题进行考虑,我可以想到两种解决方法。
第一种:利用数组将字符串储存起来,然后定义指针指向字符串所在的最后一个数组地址,然后循环进行指针地址每次减一输出就可以实现了逆序输出。
第二种方法:定义两个数组将第一个数组的第一位放到第二个数组的最后一位,这个只需要得到字符串的长度就可以很好的实现了。
显然本文是采用的第二种方法。
第二个问题:这个问题也很简单只需要把字符串中的每一个字母拿出来进行与A和Z比较(由于ASCII码的存在是可以直接进行比较的)然后定义一个计数变量每一次加一就可以了。
#include<stdio.h>
#include<string.h>
void reverse(char a[]);
int main()
{
int sumA=0;
char a[300]="";
gets(a);
reverse(a);
printf("%s, ",a);
char *p;
for (p = a; *p != '\0'; p++){
if (*p >= 'A' && *p <= 'Z')
sumA += 1;
}
printf("%d",sumA);
return 0;
}
void reverse(char a[])
{
int i,j;
char b[300]="";
j=(int)strlen(a)-1;
for(i=0;i<=j;i++)
{
b[i]=a[i];
}
b[i]='\0';
for(i=0;i<(int)strlen(a);j--,i++)
{
a[i]=b[j];
}
a[i]='\0';
}
这个代码很简单适合初学者掌握学习