移动字母 (10 分)
本题要求编写函数,将输入字符串的前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
分析:题目很简单,就是把一行字符串的前三个放到字符串的后面。 我想到的方法有两种:1、使用两个数组进行数据的交换达成需求目的。2、使用字符串处理函数,但也需要定义两个数组,相当于三个数组的运算。
作者请求:如果博友们没有在博主这里找到答案,欢迎博友私信我,一般在下午我都在线,可以单独发给博友,我也是一个菜鸟,希望与大家一起进步努力,成长。
代码实现:
方法一:利用数组交换数据实现
void Shift(char s[])
{
int len = strlen(s);
if (len == 3);
else
{
int i = 0;
int a = 0;
char arr[5] = {0};
for (i = 0;i < len;i++)
{
if (i < 3)
arr[i] = s[i];//储存s数组中下标为0-2的数据
else
s[a++] = s[i];//把s数组中3-(len-1)的数据储存在s从0下标开始的数组当中
}
for (i = 0;i < 3;i++)
{
s[a++] = arr[i];//把arr数组中的数据放在s数组的最后
}
}
}
方法二:字符串处理函数
void Shift(char s[])
{
char x[MAXS], y[MAXS];//特别注意这里定义数组的时候,需要用宏的数据,不然会报错
strcpy(x, s);//把数组数据复制给x
x[3] = '\0';//只要前三位
strcpy(y, s + 3);//复制s数组中第三个数据之后的数据
strcat(y, x);//连接y,x数据,y和x写的顺序有限制的哦,不能随意改动的
strcpy(s, y);//复制y数据给s
}