C语言语句解释,高手请进!

下列程序的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后。请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()... 下列程序的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后。请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()从in.dat文件中读取50组数据,分别得出结果且把结果输出到out.dat文件中。
例如:s字符串中原有内容为:Mn.123xyZ,调用该函数后结果为:n.123xyZM。
注意:部分原程序已经给出。

#include <string.h>
#include <stdio.h>
#define N 81
void readwriteDAT();
void chg(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;
}
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();
}
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);
chg(a);
fprintf(wf, "%s\n", a);
}
fclose(rf);
fclose(wf);
}

请高手帮我解释下这题的解题思路,以及题目要求编写的部分
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;

的语句的意思!为什么是(s+i)?
展开
 我来答
百度网友beeefa7bc
2008-04-07 · TA获得超过258个赞
知道答主
回答量:94
采纳率:0%
帮助的人:99.2万
展开全部
s是指针,指向字符串的首地址,*s表示首地址里的值,*(s+1)表示第二个地址上的值,*(s+i)表示第i个地址上的值。
该题的思路:先把首地上面的值(*s)上面的值放到ch上ch = *s,然后把后面地址上的值依次前移*(s+i) = *(s+i+1),最后把ch里的值(也就是最初首地址上的值)放到最后*(s+strl-1) = ch。
only_root
2008-04-07
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
ch = *s; //ch中存放的是字符串的第一个字符
/*下面的循环是用来将字符串中第二个开始,直到最后的一个的字符顺序往前移一位*/
for (i=0; i<strl-1; i++)
*(s+i) = *(s+i+1);
/*将字符串中的最后一个字符改为ch的内容,即原字符串的第一个字符*/
*(s+strl-1) = ch;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sopships
2008-04-07 · 超过11用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:31万
展开全部
先定义一个字符类型的变量,存放字符串中的第一个字符,再将第二个字符覆盖到第一个字符上,依次类推,然后再将你定义的存放第一个字符的字符变量覆盖到最后一个字符上
*(s+i)=s[i]
数组存放下标以0开始,ch存放s[0],也就是*(s+0)
for循环是将后面的字符覆盖到前面的字符,再将ch覆盖到最后一个字符
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金钻草根
2008-04-07 · 超过14用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:0
展开全部
这玩意儿,太学术了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式