chap8 指针基础课后作业

1.L2-2H【使用指针】 指定位置输出字符串

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

函数接口定义:

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

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

裁判测试程序样例:

#include <stdio.h>

#define MAXS 10

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

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;
}

/* 你的代码将被嵌在这里 */

输入样例1:

program
r g

输出样例1:

rog
rogram

输入样例2:

program
z o

输出样例2:

(空行)
(空行)

输入样例3:

program
g z

输出样例3:

gram
gram

代码如下:

char *match( char *s, char ch1, char ch2 )
{
    int i;
    int flag = 0;
    char *p = "", *point = s;
    for (i = 0; *(s + i) != '\0'; i++) {
        if (*(s + i) == ch1 && flag == 0) {
            p = point;
            flag = 1;
        }
        if (flag == 1) {
            printf("%c", *(s+i));
            if (*(s + i) == ch2) {
                flag = 0;
                break;
            }
        }
        point++;
    }
    printf("\n");
    return p;
}

2.L2-3H【使用指针】 查找子串

本题要求实现一个字符串查找的简单函数。

函数接口定义:

void zip( char *p );

函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 30

char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */

int main()
{
    char s[MAXS], t[MAXS], *pos;
    
    ReadString(s);
    ReadString(t);
    pos = search(s, t);
    if ( pos != NULL )
        printf("%d\n", pos - s);
    else
        printf("-1\n");

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

The C Programming Language
ram

输出样例1:

10

输入样例2:

The C Programming Language
bored

输出样例2:

-1

代码如下:

char *search( char *s, char *t )
{
    int flag = 0;
    int i, j, first;
    int len = 0;
    for (i = 0; *(t + i) != '\0'; i++) {
        len++;
    }
    for (i = 0; *(s + i) != '\0'; i++) {
        if (*(s + i) == *t) {
            first = i;
            for (j = 0; j < len; j++, i++) {
                if (*(s + i) != *(t + j)) 
                    break;
            }
            if (len == j) return first + s;
        }
    }
    return NULL;
}

 3.L1-1H【例8-8】 字符串压缩

本题要求实现一个字符串压缩的简单函数。压缩规则是:如果某个字符x连续出现n(n>1)次,则将这n个字符x替换为nx的形式;否则保持不变。

函数接口定义:

void zip( char *p );

函数zipp指向的字符串进行压缩操作。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 20

void zip( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];
    
    ReadString(s);
    zip(s);
    printf("%s\n", s);
    
    return 0;
}

/* 请在这里填写答案 */

输入样例:

Mississippi

输出样例:

Mi2si2si2pi

代码如下:

void zip( char *p )
{
    int n;
    int i;
    char *a=p;
    while(*p) {
        n=1;
        while (*p==*(p+1)) {
            n++;
            p++;
        }
        if (n>10) {
            *a++=n/10+'0';
            *a++=n%10+'0';
        } else if (n>1) {
            *a++=n+'0';
        }
        *a++=*p;
        p++;
    }
    *a++='\0';
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值