题目
请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换)。
例如,若输入" abc4EFG",则应输出"aBc4EFG"。
考点
考点:指针、ASCII码、 数组和循环语句。
解法:通过循环语句依次判断数组下标为奇数的元素是否为小写字母,如果是则通过字符运算将其转换为大写字母。
代码
#include <stdio.h>
#include <string.h>
void fun( char *ss )
{/* 变量定义*/int n=0;int i;char *p;p = ss;/*步骤1:获取字符长度*/while(*p++ != '\0')/*判断是否到了字符串末尾*/{n++;};/*步骤2:根据字符长度 遍历字符 对字符逐个处理*/for(i=1;i<n;i+=2){/*判断是不是小写字母*/if(ss[i]>='a' && ss[i]<='z'){/*是小写字母 转为大写*/ss[i] = ss[i] - 32;}}
}void main( void )
{char tt[51];void NONO ();printf( "\nPlease enter an character string within 50 characters:\n" );gets( tt );printf( "\n\nAfter changing, the string\n \"%s\"", tt );fun(tt) ;printf( "\nbecomes\n \"%s\"", tt );NONO();getchar();
}void NONO ()
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */char tt[51], ch;FILE *rf, *wf ;int len, i=0 ;rf = fopen("in.dat","r") ;wf = fopen("out.dat","w") ;while(i < 10) {fgets( tt, 50, rf );len = strlen(tt) - 1 ;ch = tt[len] ;if(ch == '\n' || ch == 0x1a) tt[len] = 0 ;fun(tt);fprintf( wf, "%s\n", tt );i++ ;}fclose(rf) ;fclose(wf) ;
}