用哑铃锻炼小臂力量:关于一个C语言编程问题,

来源:百度文库 编辑:高校问答 时间:2024/05/06 04:25:06
请大家帮个忙,编写函数char*fun(char*s,int n)实现;将字符串s1中的
字符”循环左移”n位.例如,输入”ABCDE”,循环左移2位后输出
”CDEAB”.请高手帮外忙,急切等待.

#include "alloc.h"
#include "stdio.h"

char *fun(char *s,int n) {
int len = strlen(s);
if(len<=0)return NULL;
char *p = (char*)malloc(len+1);
strcpy(p,s+n);
for(int i=0;i<n;i++) p[n+i+1]=s[i];
p[len]='\0';
return p;
}

int main()
{
char s[] = "abcde";
char *p = fun(s,2);
printf("p=%s\n", p);
return 0;
}

用链表就与题目不符合了.

用数据结构的链表实现,非常简单明了。设置一个首尾相接的环形链,想移多少位就移多少位,而且效率极高。

#include "memory.h"
#include "stdio.h"

char *fun(char *s,int n) {
int l;
void *p=malloc(n);
l=strlen(s)-n;
memcpy(p,s,n);
memcpy(s,s+n,l);
memcpy(s+l,p,n);
return s;
}

int main()
{
char s[] = "abcde";
printf("after left shifting, s=%s\n", fun(s,2));
return 0;
}
特点:速度快,代码短

直接用字符串操作函数实现
char*fun(char*s,int n)

char *s1;
char *ps;
s1=new char(strlen(s)+1);//动态申请一个字符数组空间
ps=s+n;
strcpy(s1,ps);
*ps="\0";
strcat(s1,s);
strcpy(s,s1);
delete []s1;//释放申请的字符数组空间

}

你可以用一个CHAR保存第一个字母呀??再用一个循环控制就可以了啦!!!