问答题
下列程序的功能是:把s字符串中所有的字符左移一位,串中的第一个字符移到最后。请编写函数chg()实现程序功能,最后调用函数readwriteDat(),把结果输出到OUT.DAT文件中。
例如,s字符串中原有内容为Mn,123xyZ,则调用该函数后,结果为n,123xyZM。
注意:请勿改动主函数main()和输入输出函数readwriteDAT()的内容。
【试题程序】
#include < string.h >
#include < stdlib.h >
#include < stdio.h >
#define N 81
void readwriteDAT () ;
void chg (char * s)
{
}
void main ()
{
char a[N] ;
system ("CLS" ) ;
printf ("Enter a string : ") ;
gets (a) ;
printf ("The original string is : ") ;
puts (a) ;
chg (a) ;
printf ("The string after modified :") ;
puts (a) ;
readwriteDAT () ;
}
void readwriteDAT ()
{
int i ;
char a[N] ;
unsigned char * p;
FILE * rf,* wf;
rf = fopen ("IN.DAT", "r") ;
wf = fopen ("OUT. DAT", "w") ;
for (i=0;i <10;i ++ )
{
fgets (a,80, rf) ;
p = strchr (a, "\n") ;
if (p)
*p =0;
chg (a) ;
fprintf (wf, "%s\n", a) ;
}
fclose (rf) ;
fclose (wf) ;
}
【正确答案】
【答案解析】void chg(char *s)
{ int i,str; /*定义变量,保存字符串长度*/
char temp; /*定义暂存变量*/
str=strlen(s); /*求字符串的长度*/
temp=*s; /*将第一个字符暂赋给ch*/
for(i=0;i<str-1;i++) /*将字符依次左移*/
*(s+i)=*(s+i+1);
*(s+str-1)=temp; /*将第一个字符移到最后*/
}
[解析] 本题是字符串操作类型题;本题考查用指针访问字符串的方法。
本题解题思路:首先,通过字符串处理函数(strlen())求出字符串的长度,保存第1个字符。然后,利用一个for循环将字符串依次左移一位。最后,将保存的第1个字符移到最后。
循环控制对数组元素的访问,if判断结构中的逻辑表达式。