应用题
程序test.c的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后。请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()把结果输出到out.dat文件中。
例如:s字符串中原有内容为:Mn.123xyZ,则调用该函数后,结果为:n.123xyZM。
请勿改动数据文件in.dat中的任何数据、主函数main()和输出函数readwriteDAT()的内容。
#include <stdio.h>
#include <string.h>
#define N 81 //定认宏变量N, 其值等于81
void readwriteDAT();
void chg(char *s)
{
}
main ()
{
char a[ N ];
printf('Enter a string:'); gets(a);
printf('The original string is: '); puts(a);
chg (a);
printf ('The string after modified:');
puts (a);
readwriteDAT ();
}
/*从文件in.dat中读入字符串赋给字符串变量a,调用函数chg(a)对字符串按照题目的要求进行处理,并把处理结果写入到文件out.dat中*/
void readwriteDAT()
{
int i;
char a [N];
FILE *rf, *wf;
rf=fopen('in.dat', 'r');
wf=fopen('out.dat', 'w');
for(i=0; i<10; i++)
{
fscanf (rf, '%s', a); //从文件in.dat中读取一个字符串赋给字符串a
chg (a); //调用函数chg(a)对字符串a进行处理
fprintf(wf, '%s\n', a); //把处理结果写入到out.dat文件中
}
fclose(rf);
fclose (wf);
}
【正确答案】int i; char first, *p=s; first=*s; //把字符串s的第一个字符赋给first /*把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后*/ for(i=0; i<(int) strlen(s)-1; i++) *(p+i)=*(p+i+1); //字符*(p+i+1)左移一位 p[strlen(s)-1]=first; //第一个字符移动到字符串s的最后位置
【答案解析】所有字符左移一个位置,串中的第一个字符移到最后。 ①定义循环变量i,字符变量first和字符指针变量p,并使p指向字符串s。 ②把字符串s的第一个字符赋给。first变量保存起来。 ③在for循环语句中,循环变量i从0开始,依次递增直到其值等于或大于(int)strlen(s)-1,把*(p+i+1)的值赋给*(p+i),实现把字符串s中的所有字符左移一个位置,循环结束后,把first的值赋给p[strlen(s)-1],即把字符串的首字符移动到字符串的最后位置上。