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

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

获取多个字符串中的共同字符的相关文章

iOS开发之获取一段字符串中的中文字和中文字符

#pragma mark -获取一段字符串中的中文字 + (NSArray *)getAStringOfChineseWord:(NSString *)string { if (string == nil || [string isEqual:@""]) { return nil; } NSMutableArray *arr = [[NSMutableArray alloc]init]; for (int i=0; i<[string length]; i++) { int a

统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。

/** * A:案例演示 * 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数. * [email protected]#$%^ * 分析:字符串是有字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符 * 如果包含就让计数器变量自增 */ public static void main(String[] args) { String s = "[email protected]#$%^"; int big = 0; int smal

获取两个字符串中最长相等的字符串

获取两个字符串中最长相等的字符串 例:"likeyou"和"loveyou" 输出"eyou" 前段时间面试遇到的面试题,当时的想法是首先将字符串拆分成字符数组,然后拿两个数组去做比较,可惜由于基础不是很扎实,当时的for循环比较写成了这个样子 for (int i = 0; i < arrStr1.length; i++) { for (int j = 0; j < arrStr2.length; j++) { if (arrStr

获取两个字符串中最大相同子串

2.获取两个字符串中最大相同子串.第一个动作:将短的那个串进行长度一次递减的子串打印. "cvhellobnmtanop" "andefc" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! package tan; class Test { public static String getMaxSubString(String s1,String s2) { String max = "

css如何设置字符串中第一个字符的样式

css如何设置字符串中第一个字符的样式:本章节介绍一下如何使用css设置字符串中第一个字符的样式.以前我们实现此效果的方式,可能会在第一个字符上嵌套上一个span标签.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/"

Java 求字符串中出现频率最高字符

前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下. import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /* * 查找字符串中出现频率最高的字符 * * 主要思路:先将字符

*字符串-01. 在字符串中查找指定字符

1 /* 2 * Main.c 3 * D1-字符串-01. 在字符串中查找指定字符 4 * Created on: 2014年8月18日 5 * Author: Boomkeeper 6 *****部分通过****** 7 */ 8 9 #include <stdio.h> 10 11 int mysearch(char ch, const char str[], int length) { 12 13 int j, ret = -1; 14 15 for (j = 0; j < le

JavaScript替换字符串中最后一个字符

1.问题背景 在一个输入框中,限制字符串长度为12位.利用键盘输入一个数字,会将字符串中最后一位替换,比方:111111111111.再输入一个3,会显示111111111113 2.详细实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html x

给定两个字符串,获取两个字符串中最大相同的子串

1 package weekpratisce; 2 3 ///给定两个字符串,获取两个字符串中最大相同的子串 4 public class Demo9 { 5 public static void main(String[] args) { 6 String xx = "aaaaaaaaaaddddddd", yy = "45ddddda"; 7 String str = getMaxsubstring(xx, yy); 8 System.out.println(s