一道c语言编程题,找不到错处,求大神
要求移动字符串的内容,规则是把1到m个字符串平移到最后,第m+1到最后得字符移动到前面,如m=2,ABCD得CDAB我这么做哪里有问题...
要求移动字符串的内容,规则是把1到m个字符串平移到最后,第m+1到最后得字符移动到前面,如m=2,ABCD得CDAB
我这么做哪里有问题 展开
我这么做哪里有问题 展开
展开全部
for (j = 0; j <N - 1; j++)这个语句的问题,当字符串长度没有那么大时就挪到了最后去了。改成for (j = 0; j < strlen(w) - 1; j++)就可以了。宏冲
实际上还有一种更简单的解坦核决方法,使用memcpy直接拷贝内存。
void fun(char* w, int m)
{
int len = strlen(w);
char* tmp 蔽信歼= (char*)malloc(sizeof(char)*N);
memset(tmp, 0, N);
memcpy(tmp, w, N);
memcpy(w, tmp + m, len - m);
memcpy(w + m, tmp, m);
free(tmp);
}
2019-02-01
展开全部
提问的艺灶灶尺术(中文版) 在网络世界里,当提出一个技术问题时,你能得到怎样的回答隐高... 或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,辩燃你越能得...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做法樱瞎判:先将整个字符串倒序,然后将第1~(n-m)个字符和第(n-m+1)~n个字符分别倒序即可。
#include<stdio.h>
#include<string.h>
char* reverse(char* beg, char* end)
{
char *i = beg, *j = end;
while(i<j)
{
神圆 char t = *i;
*i = *j;
*j = t;
i++;
j--;
}
脊改 return beg;
}
int main()
{
char a[80];
int m, n;
scanf("%s", a);
scanf("%d", &m);
n = strlen(a);
reverse(a, a+n-1);
reverse(a, a+n-m-1);
reverse(a+n-m, a+n-1);
puts(a);
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询