题目标题:查找指定字符 题目作者:颜晖 浙江大学
本题要求编写程序,从给定字符串中查找某指定的字符。
输入格式:
输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过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;
}