PAT1029-----介绍字符串的解题思路和部分知识点

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

输入样例:

7_This_is_a_test
_hs_s_a_es

输出样例:

7TI---------------------------------------------------------------------
思路:第一点:设置两个字符串,用strchr函数在str2字符串中查找字符,注意strchr区分大小写,但是本题因为坏掉的字母肯定不会出现所以str中有的字母肯定在str2中有,所以区分大小写没有意义所以用strchr即可
第二点:toupper是转换为大写字母的函数,在用一次strchr在bad字符串中用于查询是否重复!
/* * 1. 字母坏键只输出大写;故最差情况按键全坏为,37个字符 * 2. 利用 char *strchr(const char *s,char c);//不存在则返回NULL 判断是否坏键 */

#include <stdio.h>
#include<string.h>
#include<iostream>
#include <math.h>
#include <malloc.h>
using namespace std;int main() {
    char str1[81],str2[81],bad[37]={''};
    cin>>str1;
    cin>>str2;
    int re=0;
    for(int j=0;j<strlen(str1);j++)
    {
        if(!strchr(str2,str1[j]))              //查找第一次出现位置,返回的是指针
        {
            if(!strchr(bad,toupper(str1[j])))
            {
                bad[re++]=toupper(str1[j]);           //toupper转换为大写字母||如果为小写英文字母,则返回对应的大写字母;否则返回原来的值
            }
        }
    }
    cout<<bad;
    return 0;
}

函数原型

char *strchr(const char *str, int c)

参数

  • str-- 要被检索的 C 字符串。
  • c-- 在 str 中要搜索的字符。

功能

在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。

返回值

该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。 [2] 

头文件

#include <string.h>
原文地址:https://www.cnblogs.com/BananaMan/p/11222179.html