• 获取多个字符串中的共同字符


    John 发现了很多种岩石。每种岩石都有一个独一无二成分:由小写英文字母组成。宝石是由一个单一的字符组成,并且将在所有岩石中出现。
    给出一些岩石的成分,输出有多少种不同的宝石存在。

    输入:

    第一行包含一个整数 N, 代表岩石的个数
    接下来的N行,每行包含岩石的构成,由小写的英文字母组成

    输出:

    输出有多少种不同的宝石

    数据范围
    1 ≤ N ≤ 100
    1 ≤ 代表岩石组成的英文单词长度 ≤ 100

    样例输入
    3
    abcdde
    baccd
    eeabg
    样例输出
    2
    样例解释
    只有"a", "b"两种不同的宝石,因为它们包含在每种岩石的成分中。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void getCommonCharInStrings(char **strings, int stringNum, char *comChar)
    {
        //打印出字符内容
    //    for (int i=0; i<stringNum; i++) {
    //        printf("%s
    ", strings[i]);
    //    }
        //申请空间
        char **mapChar = (char **)malloc(sizeof(char *) * stringNum);
        for (int i=0; i<stringNum; i++) {
            *(mapChar + i) = (char *)malloc(sizeof(char) * 26);
        }
        
        //标记出现的字符
        for (int i=0; i<stringNum; i++) {
            for (int j=0; j<strlen(*(strings+i)); j++) {
                char c = (*(strings + i))[j];
                int index = (int)c - (int)'a';
                (*(mapChar + i))[index] = 1;
            }
            
        }
        
        //打印标记
    //    for (int i=0; i<stringNum; i++) {
    //        for (int j=0; j<26; j++) {
    //            printf("%d ", *(*(mapChar + i) + j));
    //        }
    //        printf("
    ");
    //    }
        
        //获取在所有字符串都出现的字符
        char result[26];
        for (int j=0; j<26; j++) {
            result[j] = 1;
            for (int i=0; i<stringNum; i++) {
                result[j] &= *(*(mapChar + i) + j);
            }
    //        printf("%d ", result[j]);
        }
    //    printf("
    ");
        
        //获取共同的字符数
        int ret = 0;
        for (int i=0; i<26; i++) {
            ret += result[i];
        }
        printf("%d
    ", ret);
        
        //将标记转换为字符
    //    char *resultStr = (char *)malloc(26 * sizeof(char));
    //    int index = 0;
    //    for (int i=0; i<26; i++) {
    //        if (result[i] == 1) {
    //            resultStr[index] = 'a'+i;
    //            index++;
    //        }
    //    }
    //    resultStr[index] = 0x00;
    //    printf("%s
    ", resultStr);
        
        //释放空间
        for (int i=0; i<stringNum; i++) {
            free(*(mapChar + i));
        }
        
        free(mapChar);
    //    free(resultStr);
    }
    
    int main(int argc, const char * argv[])
    {
    
        // insert code here...
    //    printf("Hello, World!
    ");
        
        char *str01 = "abcd";
        char *str02 = "bcde";
        char *str03 = "cdef";
        
        char *strings[100];
        strings[0] = str01;
        strings[1] = str02;
        strings[2] = str03;
        
        int stringCount = 0;
        scanf("%d", &stringCount);
        
        
        for (int i=0; i<stringCount; i++) {
            char *string = (char *)malloc(100 * sizeof(char));
            scanf("%s", string);
            strings[i] = string;
        }
        
        char comChar[26];
        getCommonCharInStrings(strings, stringCount, comChar);
        
        for (int i=0; i<stringCount; i++) {
            free(strings[i]);
        }
        
        
        return 0;
    }
    代码
  • 相关阅读:
    poj2492A Bug's Life
    poj2912Rochambeau
    poj1062昂贵的聘礼
    poj3169Layout(差分约束)
    poj2240Arbitrage
    poj1502MPI Maelstrom
    poj3259Wormholes
    1/8=1/a+1/b,a,b为自然数
    目录查找
    待删除未删除 问题解决
  • 原文地址:https://www.cnblogs.com/huangzizhu/p/3917883.html
Copyright © 2020-2023  润新知