//下面是将数组左移的函数void fun(char *a, int *length)//length为字符串a的长度{ for(int i = 0; i length - 2; i++) { a[i] = a[i+2]; }*length = (*length) - 2; } //如果只是输出左移两位的结果,可以用下面这个函数void fun(char *a, int length){ for(int i =2; i length; i++) { printf("%c",a[i]); }}
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了东方免费建站欢迎大家使用!
#include stdio.h
#include string.h
#define MAXS 10
void Shift(char s[]);
void GetString(char s[]); /* 实现细节在此不表 */
int main()
{
char s[MAXS];
GetString(s);
Shift(s);
printf("%s\n", s);
return 0;
}
//下面是修改过的答案及原因
void GetString(char s[])
{
scanf("%s", s);
return;//void也写上return比较好
}
void Shift(char s[])
{
int i, t, d = 0, e;
char a[100], b[100], c[100];
memset(a, 0, sizeof(a));//abc数组都没有初始化,里面的数据不能保证是正常的
memset(b, 0, sizeof(b));//可能在你的电脑上数据正常,放在评测机上就错了
memset(c, 0, sizeof(c));
e = strlen(s);
for (i = 0; ie; i++) {
if (i = 2) {
a[i] = s[i];
}
if (i2) {
b[d] = s[i];
d++;
}
}
d = 0;
t = strlen(b);
for (i = 0; ie; i++) {
if (it) {
s[i] = b[i];
//c[i] = b[i];
}
if (i = t) {
s[i] = a[d];
//c[i] = a[d];
d++;
}
}
// puts(c);
return;//void也写上return比较好
}
如图,源代码在网页端发
你的思路不好,我改写了。
#include stdio.h
#include string.h
#define MAXS 100
void Shift( char s[] );
void GetString( char s[] ); /* 实现细节在此不表 */
int main()
{
char s[MAXS];
GetString(s);
Shift(s); //交换
printf("%s\n", s);
return 0;
}
void GetString( char s[] ){//不写这个无法验证
scanf("%s",s);
}
void Shift( char s[] ){
char a[3];
int i,j;
for(i=0; i3 ;i++){
a[i]=s[i]; //将前3个字母存到a
}
//此时i已经=3
for(; s[i]!='\0' ;i++){
s[i-3]=s[i];
} //i从3开始 直到遇到结束符'\0',往前3格赋值
i-=3; //最后i要退回3格
for(j=0; j3 ;j++){
s[i++]=a[j];
} //将最后3个字母赋值为之前存到a的
}
问题在ArrayShift函数中的2个for循环中j的值都没有递增,可以在i++后面加个:
,j++
或者
第一个for里改成:a[j++]=a[i];
第二个for里改成:a[i]=a[j++];