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

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;
}
代码
原文地址:https://www.cnblogs.com/huangzizhu/p/3917883.html