问题 多项选择题

下列程序的功能是:把s字符串中所有的字符左移一个位置,串中的第一个字符移到最后。请编制函数 chg(char*s)实现程序要求,最后调用函数readwriteDat()把结果输出到out63.dat文件中。
例如:s字符串中原有内容为Mn,123xyZ,则调用该函数后,结果为n,123xyZM。
注意:部分源程序已给出。
请勿改动主函数main()和输入输出函数readwriteDAT()的内容。
试题程序:
#include<conio. h>
#include<stdio. h>
#define N 81
void readwriteDAT(); void chg(char *s)

main ( )

char a [N];
clrscr ();
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 ("in63.dat", "r");
wf=fopen ("out63.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,strl;
char ch;
strl=strlen (s); /*求字符串的长度*/
ch=*s; /*将第一个字符暂赋给ch* /
for (i=O; i<strl-A; i++) /*将字符依次左移*/
*(s+i) =* (s+i+l);
* (s+strl-A) =ch; /*将第一个字符移到最后*/
}

解析:
(1) 数组中元素的移动。
(2) 指针的使用。
我们可以使用一个循环实现数组中所有字符元素的左移。这里要注意的足第1个字符要移至最后1个字符处,所以首先要将第1个字符保存。在移动时,要从左到右依次移动,否则,左侧的字符会在移动前被其右侧的字符覆盖。在这里使用了指针,初始时,指针指向数组的第1个元素,随着地址的增加指针指向数组后面的元素。例如,若地址加2,

单项选择题
单项选择题 配伍题