问答题
程序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],即把字符串的首字符移动到字符串的最后位置上。