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

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

输入格式:

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

输出格式:

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

输入样例1:

mprogramming

输出样例1:

index = 7

输入样例2:

a1234

输出样例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 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 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 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;}