PTA 编程题(C语言)-- 查找指定字符

题目标题:查找指定字符          题目作者:颜晖 浙江大学

本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例1:

m
programming

输出样例1:

index = 7

输入样例2:

a
1234

输出样例2:

Not Found

思路1:先把要查找的字符输入到变量从c1中。然后在用循环读取第二行的每一个字符到变量c2中。每读一个字符,给变量i递增1,并且用当前读取的字符c2和c1进行比较,如果相等,则用变量max记录当前的i;直到把第二行末尾的'\n'输入给了c2就结束循环。循环结束时max的值恰好就是c1中存放的字符,在第二行字符串中出现的最大下标。

注意:(1)用scanf("%c", &c2)来代替c2=getchar()。

(2)在输入完第一行字符给c1后,注意第一行末尾的'\n'有没有被处理。处理的方法有两种:(i)可以在scanf("%c\n",&c1)中%c后面的\n,来把末尾的\n匹配掉;(ii)用getchar()吃掉这个\n。这两种处理方法在下面的代码中都有展示。
(3)给max初始化成-1,如果在第二行的字符串中没有找到第一行的字符,max就一直为-1。最后max的值是否为-1,来决定输出"Not Found",还是正常输出。

代码1-1:

#include <stdio.h>
int main () {
    int i = 0, max = -1;
    char c1,c2;
    scanf("%c\n", &c1);
    c2 = getchar();          //getchar()可以读一个字符(包括空格换行等转义字符),返回该字符的ascii码值
    // scanf("%c", &c2);
    while (c2 != '\n') {
        if (c2 == c1) max = i;
        c2 = getchar();
        // scanf("%c", &c2);
        i++;
    }
    printf(max==-1?"Not Found":"index = %d",max);
    return 0;
}

代码1-2:

#include <stdio.h>
int main () {
    int i = 0,index = -1;
    char c1,c2;
    scanf("%c", &c1);
    getchar();        // 用getchar()把上一行末尾的\n吃掉;
    c2 = getchar();        
    while (c2 != '\n') {
        if (c2 == c1) index = i;
        c2 = getchar();
        i++;
    }
    printf(index==-1?"Not Found":"index = %d",index);
    return 0;
}

思路2:直接用字符型数组str把第二行的字符串(有可能中间有空格)读入,一般来说要用gets(str),也可以用scanf("%[^\n]", str),注意这种用了正则表达式。

代码2:

#include <stdio.h>
int main () {
    int i = 0,index = -1;
    char c, str[81];
    scanf("%c\n", &c);
    gets(str);
    // scanf("%[^\n]", str);  // 用%s输入字符串,遇到空格会停止,要把空格包括在内可以用"%[^\n]",会读到'\n'为止 
    while (str[i] != '\0') {
        if (str[i] == c) index = i;
        i++;
    }
    printf(index==-1?"Not Found":"index = %d",index);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值