本题要求编写函数,将输入字符串的前3个字符移到最后。
函数接口定义:
void Shift( char s[] );
其中char s[]
是用户传入的字符串,题目保证其长度不小于3;函数Shift
须将按照要求变换后的字符串仍然存在s[]
里。
裁判测试程序样例:
#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;
}
/* 你的代码将被嵌在这里 */
输入样例:
abcdef
输出样例:
defabc
补充代码:
//第一种方式,用字符数组进行替换(较为简单)
void Shift( char s[] ) {
//将s字符串中的前三个字符储存到temp字符数组中
char temp[3];
int i;
for(i=0;i<3;i++){
temp[i]=s[i];
}
//将字符串整体向前提三个位置
for(i=3;s[i];i++){
s[i-3]=s[i];
}
int a=strlen(s)-1;
//末尾三个字符用前面的temp替换掉
for(i=2;i>=0;i--){
s[a]=temp[i];
a--;
}
}
//第二种方式,用字符串函数对字符串进行拷贝、链接(代码行数更少,但理解较难)——转自优快云用户hao606
void Shift(char s[]){
char b[MAXS]={0};//建立一个与传入字符串相同长度的空字符串
strcpy(b,s+3);//将传入字符串第4个字符以及以后的字符段拷贝到b字符串中
s[3]='\0';//将传入字符串s中第三个字符后以\0作为结尾,截断原字符串
strcat(b,s);//将s前三个字符和'\0'连接到b字符串末尾
strcpy(s,b);//用构建好的b字符串覆盖原传入字符串
}