//下面是將數(shù)組左移的函數(shù)void fun(char *a, int *length)//length為字符串a(chǎn)的長度{ for(int i = 0; i length - 2; i++) { a[i] = a[i+2]; }*length = (*length) - 2; } //如果只是輸出左移兩位的結(jié)果,可以用下面這個函數(shù)void fun(char *a, int length){ for(int i =2; i length; i++) { printf("%c",a[i]); }}
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了東方免費建站歡迎大家使用!
#include?stdio.h
#include?string.h
#define?MAXS?10
void?Shift(char?s[]);
void?GetString(char?s[]);?/*?實現(xiàn)細(xì)節(jié)在此不表?*/
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數(shù)組都沒有初始化,里面的數(shù)據(jù)不能保證是正常的
memset(b,?0,?sizeof(b));//可能在你的電腦上數(shù)據(jù)正常,放在評測機上就錯了
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比較好
}
如圖,源代碼在網(wǎng)頁端發(fā)
你的思路不好,我改寫了。
#include?stdio.h
#include?string.h
#define?MAXS?100
void?Shift(?char?s[]?);
void?GetString(?char?s[]?);?/*?實現(xiàn)細(xì)節(jié)在此不表?*/
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已經(jīng)=3
for(;?s[i]!='\0'?;i++){
s[i-3]=s[i];
} //i從3開始?直到遇到結(jié)束符'\0',往前3格賦值
i-=3; //最后i要退回3格
for(j=0;?j3?;j++){
s[i++]=a[j];
} //將最后3個字母賦值為之前存到a的
}
問題在ArrayShift函數(shù)中的2個for循環(huán)中j的值都沒有遞增,可以在i++后面加個:
,j++
或者
第一個for里改成:a[j++]=a[i];
第二個for里改成:a[i]=a[j++];