首页 > 试题广场 >

字符串字符匹配

[编程题]字符串字符匹配
  • 热度指数:173526 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的字符串 st,检查 s 中的所有字符是否都在 t 中出现。

输入描述:
\hspace{15pt}第一行输入一个长度为 1 \leqq {\rm len}(s) \leqq 200、仅由小写字母组成的字符串 s
\hspace{15pt}第二行输入一个长度为 1 \leqq {\rm len}(t) \leqq 200、仅由小写字母组成的字符串 t


输出描述:
\hspace{15pt}如果 s 中的所有字符都在 t 中出现,则输出 \rm true,否则输出 \rm false
示例1

输入

bc
abc

输出

true

备注:
\hspace{15pt}本题数据已规范为单组询问(2025/01/15)。
#
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

/* 判断字符ch有无在arr数组里存在,存在返回真,反之返回假 */
bool is_contain(char ch, char arr[], int len);
/* 判断短字符串S中的所有字符是否在长字符串T中全部出现 */
bool func(char long_t[], int len_long, char short_t[], int len_short);

int main() {
    char long_t[200], short_t[199];
    bool ret;
    scanf("%s", short_t);
    scanf("%s", long_t);
    short_t[strcspn(short_t, "\n")] = '\0';
    long_t[strcspn(long_t, "\n")] = '\0';
    int len_long = strlen(long_t);
    int len_short = strlen(short_t);
    ret = func(long_t, len_long, short_t, len_short);
    if (ret)
        printf("true\n");
    else {
        printf("false\n");
    }
    return 0;
}

/* 判断字符ch有无在arr数组里存在,存在返回真,反之返回假 */
bool is_contain(char ch, char arr[], int len) {
    bool ret = false;
    for (int i = 0; i < len; i++) {
        if (ch == arr[i]){
            ret = true;
            break;
        }
    }
    return ret;
}

bool func(char long_t[], int len_long, char short_t[], int len_short) {
    if (len_long > 200 || len_short < 1)
        return false;
    if (len_long < len_short)
        return false;
    int j = 0;
    bool ret = true;
    while (short_t[j] != '\0') {
        ret = is_contain(short_t[j], long_t, len_long);
        if (!ret) {
            // printf("short_t[%d]=%c\t", j, short_t[j]); //debug
            ret = false;
            break;
        }
        j++;
    }
    return ret;
}


发表于 2024-12-08 00:04:38 回复(0)
#include <stdio.h>
#include<string.h>
int main() {
    char str1[200], str2[200];
    while (scanf("%s%s", str1, str2) != EOF) {
        int num1[26] = {0}, num2[26] = {0}, flag = 1;
        for (int i = 0; i < strlen(str1); i++) {
            num1[str1[i] - 97]++;
        }
        for (int i = 0; i < strlen(str2); i++) {
            num2[str2[i] - 97]++;
        }
        for (int i = 0; i < 26; i++) {
            if (num1[i] && !num2[i]) {
                flag = 0;
            }
        }
        printf("%s\n", flag == 1 ? "true" : "false");
    }
    return 0;
}

发表于 2024-09-13 12:51:55 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char arr1[200];
    char arr2[200];
    int i, j;
    gets(arr1);
    gets(arr2);
    int len1 = strlen(arr1);
    int len2 = strlen(arr2);
    int count=0;
    for (i = 0; i < len1; i++)
    {
        for (j = 0; j < len2; j++) {
            if (arr1[i] == arr2[j]) {
                count++;
                break;
            }
        }
    }
    if (count==len1) {
        printf("true");
    }
    else {
        printf("false");
    }
    return 0;
}

发表于 2024-08-19 12:40:40 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    int bz[26] = {0};
    char ss[200],ls[300];
    scanf("%s",ss);
    scanf("%s",ls);
    int m = strlen(ss), n = strlen(ls), result = 1;
    for(int i = 0; i<n; i++){
        bz[ls[i] - 'a'] = 1;
    }
    int sum = 0;
    for(int i = 0;i<26; i++) sum += bz[i];
    if(sum == 26){printf("true");return 0;} 

    for(int i = 0; i<m; i++){
        if(bz[ss[i] - 'a'] != 1){printf("false");return 0;} 
    }
    printf("true");
    return 0;
}

编辑于 2023-12-03 21:23:20 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char S[201] = {'\0'};
    char T[201] = {'\0'};
    scanf("%s",S);
    scanf("%s",T);
    int arr[26] = { 0 };
    int i = 0;
    for ( i = 0;i < strlen(T); i++)
    {
        arr[T[i] - 'a']++;
    }
    for (i = 0; i < strlen(S); i++)
    {
        if (arr[S[i] - 'a'] == 0)
        {
            printf("false\n");
            break;
        }
    }
    if (i == strlen(S))
    {
        printf("true\n");
    }
    return 0;
}
发表于 2023-10-13 21:50:11 回复(0)
#include <stdio.h>

void judge(char*T,char*S);

int main() {
    char S[200],T[201];
    gets(S);
    gets(T);
    judge(T,S);
    return 0;
}
void judge(char*T,char*S){
    int exist[128]={0};
    for(int i=0;i<strlen(T);i++)
    {
        exist[T[i]]=1;
    }
    int i=0;
    while (exist[S[i]]&&i<strlen(S)) {
    i++;
    }
    if(i==strlen(S)) printf("true\n");
    else printf("false\n");
}

发表于 2023-03-28 16:01:59 回复(0)
/* 利用strstr 函数非常简单!*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char s[200], l[200];
    while(scanf("%s", s) != EOF)
    {
        scanf("%s", l);     
        char *ret; //子串第一次出现的位置
         ret = strstr(l, s);  
        if(ret != NULL)
            printf("true");
        else
            printf("false");
    }
    return 0;
}

发表于 2022-08-13 10:56:14 回复(2)
#include <stdio.h>


int main()
{
    char strS[200];
    char strT[200];
    
    scanf("%s %s",strS,strT);
    
    int lenS = strlen(strS);
    int lenT = strlen(strT);
    
    int i,j;
    int samenum = 0;//字符串S中能在字符串T中找到的字符的个数
    //用能找到相同字符的个数 == 字符串S的字符数来判断
    for(i=0;i<lenS;i++)
    {
        for(j=0;j<lenT;j++)
        {
            if(strS[i] == strT[j])
            {
                samenum++;
                break;
            }
        }
    }
    
    if(samenum == lenS)
        printf("true");
    else
        printf("false");
    
    return 0;
}

发表于 2022-05-17 16:16:51 回复(0)
比较笨一点
int main(void)
{
    char str_short[201] = {0};
    char str_long[201] = {0};
    
    fgets(str_short, sizeof(str_short), stdin);
    fgets(str_long, sizeof(str_long), stdin);
    
    int count_short[128];
    memset(count_short, 0, sizeof(count_short));
    int count_long[128];
    memset(count_long, 0, sizeof(count_long));
    
    for (int i =0; i< strlen(str_short) - 1; i++) {
        count_short[str_short[i]]++;
    }
    for (int i = 0; i < strlen(str_long) - 1; i++) {
        count_long[str_long[i]]++;
    }
    
    int flag1 = 0;
    int flag2 = 0;
    for (int i = 97; i <= 128; i++) {
        if (count_short[i] >= 1)
            flag1++;
        if (count_short[i] >= 1 && count_long[i] >= 1)
            flag2++;
    }
    if (flag1 == flag2)
        printf("true\n");
    else
        printf("false\n");
    
    return 0;
}
发表于 2022-04-12 23:54:49 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[200] = { 0 };
    char arr2[200] = { 0 };
    while (gets(arr1))
    {
        gets(arr2);
        int count = 0;
        int len1 = strlen(arr1);
        int len2 = strlen(arr2);
        for (int i = 0; i < len1; i++)
        {
            for (int j = 0; j < len2; j++)
            {
                if (arr1[i]-arr2[j]==0)
                {
                    count++;
                    break;
                }
            }
        }
        if(count==len1)
            printf("true\n");
        else
            printf("false\n");
    }
    return 0;
}

发表于 2022-04-10 14:46:17 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    char str[200]={0};
    char ret[200]={0};
    int mat[26]={0};
    scanf("%s",str);
    scanf("%s",ret);
    if(strlen(str)>strlen(ret))
    {
        printf("false");
        return 0;
    }
    for(int i=0;i<strlen(str);i++)
    {
            int temp=(int)str[i]-97;
        if(mat[temp]!=1)
            mat[temp]++;
    }
    for(int i=0;i<strlen(ret);i++)
    {
        int temp=(int)ret[i]-97;
        mat[temp]--;
    }
    for(int i=0;i<26;i++)
    {
        if(mat[i]>0)
        {
            printf("false");
            return 0;
        }
    }
    printf("true");
    return 0;
}

发表于 2022-03-19 20:21:40 回复(0)
// 暴力解
#include <stdio.h>
#include <string.h>

int main(void)
{
    char longStr[1024] = {'\0'};
    char shortStr[512] = {'\0'};
    
    while (scanf("%s%s", shortStr, longStr) != EOF) {
        for (int i = 0; i < strlen(shortStr); i++) {
            int flag = 0;
            for (int j = 0; j < strlen(longStr); j++) {
                if (shortStr[i] == longStr[j]) {
                    flag = 1;
                    break;
                }
            }
            if (!flag) {
                printf("false\n");
                goto OUT; // 进入下一轮循环
            }
        }
        
        printf("true\n");
OUT:
        ; // 空语句,进入下一轮循环
    }
    
    return 0;
}

发表于 2021-09-20 22:12:22 回复(0)