本题要求编写函数,将输入字符串的前3个字符移到最后。

问题遇到的现象和发生背景

本题要求编写函数,将输入字符串的前3个字符移到最后。

问题相关代码,请勿粘贴截图

void Shift( char s[] )
{ char a[20];
int i,j=0,k,t;
t=strlen(s);
strcpy(a,s);
if(t==3)
return s;
else

for(i=0;i<t-3;i++)
{
a[i]=s[i+3];
}
for(i=t-3;i<t;i++)
{
a[i]=s[j];
j++;
}
return a;
}

运行结果及报错内容

在pta出现没用转换的

我的解答思路和尝试过的方法

把旧的数组分别赋值到新的数组

我想要达到的结果

将输入字符串的前3个字符移到最后。


能用库函数就简单了。
void Shift(char s[])
{
    char a[3];
    int t;
    t = strlen(s);
    if(t <= 3)
        return; 
    memcpy(a,s,3);
    strcpy(s,s+3);
    memcpy(s+t-3,a,3);
}

两种方法

img

#include <stdio.h>
#include <string.h>
void Shift( char s[] )
{
    for(int i=0;i<3;i++)
    {
        char tem=s[0];
        int j;
        for(j=0;s[j]!='\0';j++)
            s[j]=s[j+1];
        s[j-1]=tem;
        //puts(s);
    }
} 
void Shift2( char s[] )
{
    char tem[250];
    int i;
    for(i=3;s[i]!='\0';i++)
        tem[i-3]=s[i];
    for(int j=0;j<3;j++)
        tem[i-1-j]=s[3-j-1];
    for(int j=0;j<i+1;j++)
        s[j]=tem[j];
} 
int main()
{
    char t[250];
    char t2[250];
    gets(t);
    strcpy(t2,t);
    Shift(t);
    puts(t);
    Shift2(t2);
    puts(t2);
    return 0;
}