实验三:指针进阶

1. 输出月份英文名

 本题要求实现函数,可以返回一个给定月份的英文名称。

函数接口定义:

char *getmonth( int n );

函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL

输入样例1

5

输出样例1

May

输入样例2

15

输出样例2

wrong input!
#include <stdio.h>

char *getmonth( int n )
{
    char *month[13] = {"January","February","March","April","May",
                        "June","July","August","September","October",
                        "November","December","wrong input!"};
    char *s;
    if(n>=1 && n<=12)
        s = month[n-1];
    else
        s = month[12];
    return s;
}

int main()
{
    int n;
    char *s;
    scanf("%d", &n);
    s = getmonth(n);
    if ( s == NULL )
        printf("wrong input!\n");
    else
        printf("%s\n", s);
    return 0;
}

2. 指定位置输出字符串

本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

函数接口定义:

char *match( char *s, char ch1, char ch2 );

函数match应打印s中从ch1ch2之间的所有字符,并且返回ch1的地址。

裁判测试程序样例:

输入样例1

program
r g

输出样例1

rog
rogram

输入样例2

program
z o

输出样例2

(空行)
空行)

输入样例3

program
g z

输出样例3

gram
gram
#include <stdio.h>
#include <string.h>
#define MAXS 10

char *match( char *s, char ch1, char ch2 )
{
    int i = 0, j = 0, len = 0;
    char *p = NULL;
    len = strlen(s);//统计字符串长度
    for(i = 0;i < len;i++)//遍历s
    {
        if(*(s+i) == ch1)
        {
            p = &s[i];//让p指向第一个与ch1相同的字符
            for(j = i;j < len; j++)//从第一个相同的字符开始继续向下遍历
            {
                if(s[j] != ch2)
                    printf("%c",*(s+j));//第一个字符之后的字符如果与最后一个字符串不相同则输出此字符
                if(s[j] == ch2)
                {
                    printf("%c\n",*(s+j));//当与第二个字符相同时则输出此字符并换行后返回p
                    return p;
                }
            }
            printf("\n");
            return p;
        }
    }
printf("\n");
    return p;
}


int main()
{
    char str[MAXS], ch_start, ch_end, *p;

    scanf("%s\n", str);
    scanf("%c %c", &ch_start, &ch_end);
    p = match(str, ch_start, ch_end);
    printf("%s\n", p);

    return 0;
}

3. 字符串排序

函数接口定义:

void fsort(char *color[ ], int n);

其中 color为指针数组首地址,n是字符串个数。

裁判测试程序样例:

输入样例:

 
 

输出样例:

black blue green red yellow

#include <stdio.h>
#include <string.h>
void fsort(char *color[ ], int n)
{
    int flag;
    char *temp;
    for(int i =0 ; i < n-1 ; i++)
    {
        for(int j = 0 ; j < n-1-i ; j++)
        {
            flag = strcmp(color[j],color[j+1]);
            if(flag > 0)
            {
                temp = color[j+1];
                color[j+1] = color[j];
                color[j] = temp;
            }
        }
    }
}

int main(void)
{
    int i;
    char *pcolor[ ] = {"red", "blue", "yellow", "green", "black"};
    fsort(pcolor, 5);   /* 调用函数 */
    for(i = 0; i < 5; i++)
        printf("%s ", pcolor[i]);
    printf("\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值