请教一个关于指针的填空题!!!!!!!!!!!
这个题目的解是什么呢。。。
我第一感觉是S2根本就是空值啊。。。那最后为什么会复制给S呢。。
难道说在第二个空那里是在用一个函数赋值给S2了么。。。
还是不太懂啊。。
请各位大大赐教。。
感谢!!!!!!!
题目如下:
串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”,这就称为对串进行位移=1的轮换,同理,“abcd”变为“cdab”则称为位移=2的轮换,下面代码实现了对串S进行了位移为n的轮换,请补全代码。
void shift(char *s,int n)
{
char *p;
char *q;
int len=strlen(s);
if(len==0)
return;
if(n<=0||n>=len)
return;
char *s2=(char *)malloc(_______);
p=s;
q=s2+n%len;
while(*p)
{
*q++=*p++;
if(q-s2>=len)
{
*q=__________;
q=s2;
}
}
strcpy(s,s2);
free(s2);
}
[解决办法]
第一个填len+1
第二个填'\0'
必须要+1,strlen()给出的是不加'\0'的字符串长度
VC6.0下测试代码
#include<stdio.h>#include<string.h>#include<malloc.h>void shift(char *s,int n);int main(){ char* ss = "abcdefg"; char* str =(char *)malloc(strlen(ss)+1); if (str == NULL) return 1; strcpy(str,ss); printf("%s\n", str); shift(str, 3); printf("%s\n", str); return 0;}void shift(char *s,int n){ char *p; char *q; int len=strlen(s); if(len==0) return; if(n<=0||n>=len) return; char *s2=(char *)malloc(len+1); p=s; q=s2+n%len; while(*p) { *q++=*p++; if(q-s2>=len) { *q='\0'; q=s2; } } strcpy(s,s2); free(s2);}