关于C语言程序,求大神帮忙解答

wumeilin1121 2013-04-24 09:19:45
轮换
串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”。这称为对串进行位移=1的轮换。同理,“abcd”变为:“cdab”则称为位移=2的轮换。
代码如下:
1 #include <string.h>
2 #include <stdlib.h>
3 void shift(char* s, int n)
4 {
5 char* p;
6 char* q;
7 int len = strlen(s);
8 char* s2;
9 ​if(len==0) return;
10 if(n<=0 || n>=len) return;
11 s2= (char*)malloc(sizeof(char)*(len+1));
12 ​ p = s;
13 q = s2 + n % len;
14 while(*p)
15 {
16 *q++ = *p++;
17 if(q-s2>=len)
18 {
19 *q = '\0';
20 q = s2;
21 }
22 ​}
23 strcpy(s,s2);
24 free(s2);
25 }
26 void main()
27 {
28 char str[10] = "zhanghe";
29 shift(str,2);
30 printf("%s\n",str);
31 }

请问11行为什么是len+1?
12行13行又是什么意思,p、q代表什么?
17行是什么意思?
...全文
139 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zailushang1988 2013-04-26
  • 打赏
  • 举报
回复
这个11行看着很揪心,sizeof结果是无符号的,但len是有符号的;
紫日学C 2013-04-25
  • 打赏
  • 举报
回复
11行 是给字符串s2动态申请空间,因为字符串最后一位是'\0',所以要加1,不然会溢出 12行 p代表的是需要移动的原字符串的第一个字符 13行 q指向的是上次换轮的位置 17行 判断是否移动最后一位

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧