各种查找(c语言)

查找单词

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,还能统计出特定单词在文章中出现的次数。现在,请你编辑实现这一功能,具体要求是:

给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。(单词不区分大小写,要求完全匹配,若为单词一部分不算匹配。

输入格式:

请在这里写输入格式。例如:输入在一行中给出2个绝对值不超过1000的整数A和B。

输出格式:

请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。

输入样例:

在这里给出一组输入。例如:

If you don't want to receive the latest jobs from FacultyVacancies.com, or have received the latest jobs from FacultyVacancies.com by mistake, please unsubscribe xb-xiaobin@163.com. Thank you very much.
latest

输出样例:

在这里给出相应的输出。例如:

2
33

万能代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000],b[1000];
    gets(a);
    gets(b);
    int len1=strlen(a);
    int len2=strlen(b);
    int i,j,k,count=0,flag=0;
    for(i=0;i+len2<=len1;i++)
    {
        for(j=i,k=0;k<len2;j++,k++)
        {
            if(a[j]!=b[k])
                break;
        }
        if(j==i+len2&&a[j]==' ')
        {
            count++;
            if(count==1)
                flag=i;
        }
    }
    printf("%d\n",count);
    printf("%d",flag);
}

 查找子串

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

函数接口定义:

char *search( char *s, char *t );

函数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

代码:

int strcmp(char *s,char *t)
{
    for(;*t!='\0';s++,t++)
    {
        if(*s!=*t)
            return 0;
    }
    return 1;
}
char *search( char *s, char *t )
{
    char *ps=s;
    char *pt=t;
    while(*ps!='\0')
    {
        if(*ps==*pt)
        {
            if(strcmp(ps,pt)==1)
                return ps;
        }
        ps++;
    }
    return NULL;
}

 

 统计以指定字母开头的单词个数

本题目:先输入一个含有多个单词的字符串,然后再输入一个字母,然后调用函数getWordNum统计该行字符中以指定字母开始的单词的个数(不区分大小写)。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

函数接口定义:

int getWordNum(char ar1[], char ch) ;

函数返回以形参变量ch中的字符开头的字符数组ar1中的单词数

裁判测试程序样例:

#include<stdio.h>

int getWordNum(char ar1[],char ch) ;

int main()

{

char string[81],c,n; gets(string);

c=getchar();

n=getWordNum(string,c);

printf("%d",n); return 0;

}

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

输入样例: 

在这里给出一组输入。例如:

af Adf Dad abdde
a

输出样例: 

在这里给出相应的输出。例如:

3

 代码:

 int getWordNum(char ar1[], char ch) 
{
    char *pa=ar1;
    int count=0;
    for(int i=0;pa[i]!='\0';i++)
    {
        if('a'<=ch&&ch<='z')
        {
            if((i == 0 || pa[i-1]==' ') && (pa[i]==ch||pa[i]==ch-32))
            {
                count++;
            }
        }
        else if('A'<=ch&&ch<='Z')
        {
            if((i == 0 || pa[i-1]==' ') && (pa[i]==ch||pa[i]==ch+32))
                count++;
        }
    }
    return count;
}

 指定位置输出字符串 

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

函数接口定义:

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: 

(空行)
(空行)

输入样例2:

(空行)
(空行)

输出样例3: 

gram
gram

 代码:

char *match( char *s, char ch1, char ch2 )
{
    char *ps=s;
    char *ret;
    while(*ps!='\0'&&*ps!=ch1)
        ps++;
    ret=ps;
    while(1)
    {
        if(*ps=='\0')
            break;
        printf("%c",*ps);
        if(*ps==ch2)
            break;
        ps++;
    }
    printf("\n");
    return ret;
}

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值