首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求解,多谢啦

2012-04-02 
求解,谢谢啦!轮转数(每个字符依次向右移)例:字符串abcd 经过一次轮转后为dabc 此时位移记作1字符串abcd 进

求解,谢谢啦!
轮转数(每个字符依次向右移)
例:
字符串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;
char *s2=(char *)malloc(_______); //这里填sizeof(char)*len对吗?
p=s;
q=s2+n%len;
while(*p)
{
  *q++=*p++;
  if((q-s2)=len)
  {
  *q=_____; //这里要填什么?
  q=s2; 
  }
}
strcpy(s,s2);
free(s2);
}


[解决办法]
len + 1 

strlen("abcd") = 4, 但还有个'\0'要存放 
判断if((q-s2)=len)时q的地址已经越界了
c语言允许一个位置的越界,但是赋值*q='\0';就不行了吧(个人理解) 

'\0'

最后一个存放'\0'表示字符串终止符
[解决办法]

探讨

大家可以帮忙解释下这个程序吗?
比如说n=1,abcd应该变成bcda

我觉得*q++=*p++不是比如说把abcd中的bcd复制过去了吗,但是前面的a呢,是怎么给s2的数组的。

热点排行