练习 4-1 编写函数strindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。

本文介绍了一个使用C语言实现的基本文本搜索程序,该程序能够从输入的文本中查找包含特定字符串的所有行,并统计这些行的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


//将输入中包含特定字符串的行打印出来
#include <stdio.h>
#include <string.h>
#define MAXLINE     1000 /* maximum input line length*/

int getoneline(char line[], int max);
int strindex(char source[], char searchfor[]);

char pattern[] = "of"; /*pattern to search for*/

/*find all lines matching pattern*/
int main(void)
{
    char line[MAXLINE];
    int found = 0;

    while(getoneline(line, MAXLINE) > 0)
    {
        printf("输入ctrl+z退出。\n");
        if(strindex(line, pattern) >= 0)
        {
            printf("%s",line);
            found++;
        }
    }
    printf("总共有%d行。", found);       

    return 0;
}

/* getoneline: get line into s, return length*/
int getoneline(char s[], int lim)
{
    int c, i;
    i = 0;
    while(--lim > 0 && (c=getchar()) != EOF && c != '\n')
        s[i++] = c;
    if(c == '\n')
        s[i++] = c;
    s[i] = '\0';
    return i;
}

// /*strindex: return index of t in s, -1 if none*/
// int strindex(char s[], char t[])
// {
//     int i, j, k;
//     for(i=0;s[i]!='\0';i++)
//     {
//         for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++)
//             ;
//         if(k>0 && t[k]=='\0')
//             return i;
//     }
//     return -1;
// }

//练习4-1
/*strindex: return index of t in s, -1 if none*/
int strindex(char s[], char t[])
{
    int i, j, k;
    for(i=strlen(s)-1;i>=0;i--)
    {
        for(j=i,k=strlen(t)-1;k>=0 && s[j]==t[k];j--,k--)
            ;
        if(k==(-1) && t[k+1]!='\0') //k==(-1)是保证t[]字符串比对完,t[k+1]!='\0'是保证t[]不为空  这里的k==(-1)相当于顺序比较中的t[k]=='\0'   这里的t[k+1]!='\0'相当于顺序比较中的k>0
            return i;
    }
    return -1;
}

练习题中的代码比原来的代码多用一个strlen()函数,需要加#include <string.h>头文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值