下列程序的功能是:把s字符串中的所有字符左移一个位置,字符串中的第一个字符移到最后。请编写函数change(char*s)实现程序要求,最后调用函数readwriteDAT()从IN.dat文件中读取50组数据,分别得出结果,且把结果输出到OUT.dat文件中。
例如,s字符串中原有内容为:Mn.123xyZ,调用该函数后结果为:n.123xyZM。
注意:部分源程序已经给出。请勿改动主函数main()和输出数据函数readwriteDAT()中的内容。
#include <string.h>
#include <stdio.h>
#define N 81
void readwriteDAT();
void change(char*s)
{
}
main()
{ char a[N];
printf("Enter a string : ");
gets(a);
printf("The original string is : ");
puts(a);
change(a);
printf("The string after modified : ");
puts(a);
readwriteDAT();
}
void readwriteDAT()
{ int i;
char a[N];
FILE *rf, *wf;
rf = fopen("IN.dat", "r");
wf = fopen("OUT.dat", "w");
for (i=0; i<50; i++)
{ fscanf(rf, "%s", a);
change(a);
fprintf(wf, "%s\n", a);
}
fclose(rf);
fclose(wf);
}
试题答案及详解
【审题分析】分析题目可知,本题只要实现change(char*s)函数的功能即可。change(char*s)要实现的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后。因此解答本题的关键在于如何将字符串拆分成单个字符并赋值给数组,并通过数组的下标将字符逐个左移一位。
【解题思路】首先用字符串函数strlen求出字符串s的长度,赋给变量strl;再把字符串的首字符赋给字符变量ch;然后在for循环语句中,变量i从0递增到strl-1,字符串s中的所有字符左移一个位置;最后把字符变量ch的值赋给*(s+strl-1),即完成了题目要求的功能。
【参考答案】
void change(char*s)
{ int i, strl;
char ch;
strl = strlen(s);
ch = *s;
for (i=0; i<strl-1; i++)
*(s+i) = *(s+i+1);
*(s+strl-1) = ch;
}
【易错分析】在字符串左移时要首先把首字符存入一个字符变量中。
【考点链接】字符串中字符的移动。
责任编辑:小草