目录
6-1 移动字母
本题要求编写函数,将输入字符串的前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
编译器:GCC
代码
void Shift( char s[] )
{//数组作为函数参数,实际上是传入首元素地址,即使函数返回类型是void,也可以传回修改后的值
char b[4];
int a=strlen(s); //计算字符串长度a
int i;
for(i=0;i<3;i++)
b[i]=s[i]; //取前三个字符赋值给数组b
b[3]='\0'; //字符串末尾加空字符
char x[a+1]; //定义一个数组x,大小为字符串s的长度加1,留一位给空字符
for(i=0;i<a-3+1;i++)
{
x[i]=s[i+3]; //从字符串s的第4个元素s[3]开始,依次赋值给数组x,包括最后结尾空字符
}
strcat(x,b); //strcat函数两个字符串拼接
strcpy(s,x); //使用strcpy函数字符串x赋值给字符串s
}
6-2 函数实现字符串逆序
本题要求实现一个字符串逆序的简单函数。
函数接口定义:
void f( char *p );
函数f
对p
指向的字符串进行逆序操作。要求函数f
中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 20
void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
f(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
Hello World!
输出样例:
!dlroW olleH
编译器:GCC
代码
void f( char *p )
{//函数参数为指针
int i=0,q=0,h,huan;
while(p[i]!='\0')//终止条件为遇到空字符
i++; //统计字符串长度
h=i-1;
while(q<=h)
{
huan=p[q];
p[q]=p[h]; //首尾字符交换
p[h]=huan;
q++; //取下一个
h--; //取下一个
}
}
6-3 使用函数实现字符串部分复制
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy
将输入字符串char *t
中从第m
个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
happy new year
输出样例:
new year
编译器:GCC
代码
void strmcpy( char *t, int m, char *s )
{//函数参数有指针
int i=0;
int count=0;
for(i=m-1;t[i]!='\0';i++) //从第m个字符开始,下标为m-1,for终止条件为遇到空字符
{
s[count]=t[i]; //将每个字符复制到s中
count++; //s的下标递增
}
s[count]='\0'; //结尾加空字符
}
6-4 查找星期
本题要求实现函数,可以根据下表查找到星期,返回对应的序号。
序号 | 星期 |
---|---|
0 | Sunday |
1 | Monday |
2 | Tuesday |
3 | Wednesday |
4 | Thursday |
5 | Friday |
6 | Saturday |
函数接口定义:
int getindex( char *s );
函数getindex
应返回字符串s
序号。如果传入的参数s
不是一个代表星期的字符串,则返回-1。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
int n;
char s[MAXS];
scanf("%s", s);
n = getindex(s);
if ( n==-1 ) printf("wrong input!\n");
else printf("%d\n", n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
Tuesday
输出样例1:
2
输入样例2:
today
输出样例2:
wrong input!
编译器:GCC
代码
int getindex(char* s)
{//函数参数为指针
int index = -1;
if (strcmp(s,"Sunday")==0) //使用strcmp函数比较两个字符串是否相等
{
index = 0;
}
else if (strcmp(s, "Monday") == 0)//使用strcmp函数比较两个字符串是否相等
{
index = 1;
}
else if (strcmp(s, "Tuesday") == 0)//使用strcmp函数比较两个字符串是否相等
{
index = 2;
}
else if (strcmp(s, "Wednesday") == 0)//使用strcmp函数比较两个字符串是否相等
{
index = 3;
}
else if (strcmp(s, "Thursday") == 0)//使用strcmp函数比较两个字符串是否相等
{
index = 4;
}
else if (strcmp(s, "Friday") == 0)//使用strcmp函数比较两个字符串是否相等
{
index = 5;
}
else if (strcmp(s, "Saturday") == 0)//使用strcmp函数比较两个字符串是否相等
{
index = 6;
}
return index;
}