关于C语言程序,求大神帮忙解答
轮换
串“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行是什么意思?
串“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行是什么意思?
...全文
相关推荐
C语言程序设计习题解答[项目源码]
本文档是翁恺教授在中国大学MOOC平台上C语言程序设计课程的习题解答项目源码。
C语言程序设计实训教程习题和实验解答文件.doc.doc
实验解答部分进一步强化了对C语言的理解,例如编写程序求三个数的和,以及处理各种数据类型和格式的输入输出,如字符串、整数和浮点数。此外,还涉及到错误处理和程序调试,确保程序的正确性和健壮性。
啊哈C语言习题解答.pdf
### 三、程序结构和逻辑- **main函数**:C/C++程序的入口点,文档中所有习题的解答都以`int main()`函数开始。
C语言程序设计答案集[项目代码]
在《C语言程序设计答案集》中,读者可以找到一系列精心挑选的练习题及其参考解答,这些题目旨在帮助学习者加深对C语言的理解和运用。
c语言程序填空题.pdf
通过解答这些问题,可以加深对C语言的理解,并提升编程技能。


