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\n", 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("\n"); // } //获取在所有字符串都出现的字符 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("\n"); //获取共同的字符数 int ret = 0; for (int i=0; i<26; i++) { ret += result[i]; } printf("%d\n", 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\n", 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!\n"); 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; }
代码
获取多个字符串中的共同字符
时间: 2024-11-06 04:01:07