66 字符串统计

作者: SunCiHai时间限制: 10S章节: 字符串

问题描述 :

明明最近在做一个有关字符串的统计工作。两个由小写字母组成的字符串s1和s2,明明需要统计出以下四种关系:

(1)在s1或s2中存在的字母(包括在s1和s2中都存在的字母);

(2)在s1中且在s2中的字母;

(3)在s1中但不在s2中的字母,在s2中但不在s1中的字母;

(4)不在s1中且也不在s2中的字母;

例如两个字符串s1为“lkjsvoahs”,s2为“qglhskjdfg”:

(1)在s1或者在s2或者s1、s2中都存在的字母:adfghjkloqsv;

(2)在s1中且在s2中的字母:hjkls;

(3)在s1中但不在s2中的字母,在s2中但不在s1中的字母:adfgoqv;

(4)不在s1中且也不在s2中的字母:bceimnprtuwxyz;

明明统计了很久,但是由于统计过程十分繁琐,且很容易出错,导致明明的进度非常慢,很有可能因为统计不完而错过了晚上的约会。因此明明想请你帮个忙,帮他写一个程序,用程序来统计出以上几项内容。

明明的问题可以归结为:

输入两串由小写字母组成的字符串s1和s2,比较其中的字母,输出以下四项,输出的字母以字典顺序排列:

(1)在s1或s2中存在的字母(包括在s1和s2中都存在的字母);

(2)在s1中且在s2中的字母;

(3)在s1中但不在s2中的字母,在s2中但不在s1中的字母;

(4)不在s1中且也不在s2中的字母;

例如字符串s1为sadf,s2为asdf,则需输出以下四行(注意输出的格式):

in s1 or s2:adfs

in s1 and s2:adfs

in s1 but not in s2 ,or in s2 but not in s1:

not in s1 and s2:bceghijklmnopqrtuvwxyz

输入说明 :

你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据两行,每组测试数据的第一行为字符串s1,每组测试数据的第二行为字符串s2;s1和s2都由小写英文字母组成,且长度不超过26个字符。测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。

每组运算结果由四行组成:

第一行为在s1或者在s2或者s1、s2中都存在的字母;

第二行为在s1中且在s2中的字母;

第三行为在s1中但不在s2中的字母,在s2中但不在s1中的字母;

第四行为不在s1中且也不在s2中的字母;

具体格式请参考样例输出。

每组运算结果其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果后面没有空行。

注:通常,显示屏为标准输出设备。

输入范例 :

sadf
asdf
lkjsvoahs
qglhskjdfg
输出范例 :

in s1 or s2:adfs
in s1 and s2:adfs
in s1 but not in s2 ,or in s2 but not in s1:
not in s1 and s2:bceghijklmnopqrtuvwxyz

in s1 or s2:adfghjkloqsv
in s1 and s2:hjkls
in s1 but not in s2 ,or in s2 but not in s1:adfgoqv
not in s1 and s2:bceimnprtuwxyz

解决方案:

采用四个函数解决四个问题,按部就班写即可,注意细节问题
#include <stdio.h>
#include <string.h>char  number1[26];char  number2[26];char  number3[26];char  number4[26];
void sort(char s[],int len){//排序加上剔除重复的int i, j;for (i = 0; i < len;i++)for (j = 0; j < len - i - 1; j++){if (s[j]>s[j + 1]){char temp = s[j];s[j] = s[j + 1];s[j + 1] = temp;}}char *p = s;i = 0;while (*p != '\0'){if (*p != *(p + 1))s[i++] = *p;p++;}s[i] = '\0';//字符串结束标志
}
void function1(char s1[],int len1,char s2[],int len2){//求并集int index;for (index = 0; index < len1; index++){//手写strcpy函数number1[index] = s1[index];}int i,j;for (j = 0; j < len2; j++){for (i = 0; i < index; i++){if (number1[i] == s2[j])break;}if (i==index)number1[index++] = s2[j];}sort(number1, index);}
void function2(char s1[], int len1, char s2[], int len2){//求交集int index=0;int i, j;for (i = 0; i < len1; i++){for (j = 0; j < len2; j++){if (s1[i] == s2[j])number2[index++] = s1[i];}}if (index == 0) number2[0] = '\0';sort(number2, index);
}
void function3(char s1[], int len1, char s2[], int len2){//在s1不在s2 在s2不在s1int index = 0;int i, j;for (i = 0; i < len1; i++){//在s1中for (j = 0; j < len2; j++){if (s1[i] == s2[j])break;}if (j==len2)number3[index++] = s1[i];}for (j = 0; j < len2;j++){//在s2中for (i = 0; i < len1; i++){if (s1[i] == s2[j])break;}if (i == len1)number3[index++] = s2[j];}if (index == 0) number3[0] = '\0';sort(number3, index);
}
void function4(char s1[], int len1, char s2[], int len2){//不在s1也不在s2 26个字母char t = 'a';int i,j;int index = 0;char number[26];for (i = 0; i < 26; i++){number[i] = t;t++;}int len = strlen(number1);for (i = 0; i < 26; i++){for (j = 0; j < len; j++){if (number[i] == number1[j])break;}if (j == len)number4[index++] = number[i];}if (index == 0) number4[0] = '\0';sort(number4, index);}
int main(){char s1[26];char s2[26];while (scanf("%s%s", s1, s2) != EOF){int i;//for (i = 0; i < 26; i++)//清空数组的另一种办法  /*{number1[i] = '\0';number2[i] = '\0';number3[i] = '\0';number4[i] = '\0';}*/memset(number1,0,sizeof(number1));//经测试memset函数可以用memset(number2,0,sizeof(number2));memset(number3,0,sizeof(number3));memset(number4,0,sizeof(number4));int len1 = strlen(s1);int len2 = strlen(s2);sort(s1, len1);sort(s2, len2);len1 = strlen(s1);len2 = strlen(s2);printf("in s1 or s2:");function1(s1, len1, s2, len2);printf("%s\n", number1);printf("in s1 and s2:");function2(s1, len1, s2, len2);printf("%s\n", number2);printf("in s1 but not in s2 ,or in s2 but not in s1:");function3(s1, len1, s2, len2);printf("%s\n", number3);printf("not in s1 and s2:");function4(s1, len1, s2, len2);printf("%s\n", number4);printf("\n");}return 0;
}

小结:全局数组变量清空尤其要注意(方法不对就会导致下次再用时会留下残留的)

进阶题66 字符串统计相关推荐

  1. 东华oj-进阶题第66题-字符串统计

    66 字符串统计 作者: SunCiHai时间限制: 10S章节: 字符串 问题描述 : 明明最近在做一个有关字符串的统计工作.两个由小写字母组成的字符串s1和s2,明明需要统计出以下四种关系: (1 ...

  2. python教程07-while语句的基本使用、for...in循环的使用、break与continue、打印矩形三角形九九乘法表、基础题、进阶题

    python教程_小白入门/2020/7/20 行百里者半九十,你可一定要坚持下去啊 前几天家里有事更新给耽误了,后续会稳定更新的,一起加油! 学习目标 文章目录 python教程_小白入门/2020 ...

  3. 每日一题——反转字符串中的单词

    每日一题 反转字符串中的单词 题目链接 思路(进阶) 我们首先不考虑太多限制因素,先看如何实现字符串中单词的反转 举个例子:我们要反转字符串"the sky is blue"中的单 ...

  4. Go 学习笔记(51)— Go 标准库之 strings(字符串比较、字符串前后缀、字符串统计、字符串索引、字符串包含、字符串转换、字符串复制、字符串替换、字符串去除、字符串分割和连接)

    1. 概述说明 import "strings" strings 包实现了用于操作字符的简单函数. strings 包与 bytes 包中的函数用法基本一样. 2. 主要函数 2. ...

  5. 程序员面试题精选100题(59)-字符串的组合[算法]

    题目:输入一个字符串,输出该字符串中字符的所有组合.举个例子,如果输入abc,它的组合有a.b.c.ab.ac.bc.abc. 分析:在本系列博客的第28题<字符串的排列>中,我们详细讨论 ...

  6. misc高阶 攻防世界_攻防世界 Misc 进阶题(一)

    攻防世界 Misc 进阶题(一) 关于隐写术的思路或方法 转载: https://blog.csdn.net/a_small_rabbit/article/details/79644078     隐 ...

  7. 牛客题霸 [字符串的排列] C++题解/答案

    牛客题霸 [字符串的排列] C++题解/答案 题解: stl真好用,emmm... 代码: class Solution {public:vector<string> Permutatio ...

  8. 牛客题霸 [字符串变形]C++题解/答案

    牛客题霸 [字符串变形]C++题解/答案 题目: 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello World& ...

  9. C++描述杭电OJ 2017.字符串统计||

    C++描述杭电OJ 2017.字符串统计|| Problem Description 对于给定的一个字符串,统计其中数字字符出现的次数. Input 输入数据有多行,第一行是一个整数n,表示测试实例的 ...

最新文章

  1. 2022-2028年中国互联网+汽车行业深度调研及投资前景预测报告
  2. 【转】ssh服务器启动和客户端常用操作
  3. Android传感器编程带实例
  4. 基于GRU和am-softmax的句子相似度模型 | 附代码实现
  5. 解决vue router使用 history 模式刷新后404问题
  6. linux如何判断同名进程个数,Linux下判断是否存在多个同名进程
  7. 如何辨别二逼互联网公司!?
  8. java true false_关于java:如何存储boolean返回false / true的次数
  9. 被苹果摆了一道的高通,亮出了一张“小米”牌
  10. C语言:求矩阵对角线元素的和
  11. 写给小白看的马尔科夫链(Markov Chain)最佳入门教程
  12. 高等数学——多元函数极值的定义
  13. Executive functions (执行功能)
  14. 使用 styled-components 定义组件样式
  15. 自兴人工智能——Python第二课(列表和元组)
  16. 2018辽大计算机拟录取,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示...
  17. bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm
  18. JS获取DOM元素的方法
  19. 机器学习强基计划4-2:通俗理解极大似然估计和极大后验估计+实例分析
  20. Ubuntu11.10无法打开softer center(软件中心)和language support的解决

热门文章

  1. 识别人脸关键点给人脸加眼镜特效
  2. 收发和记录回放CAN报文的来可CAN卡通用测试软件功能介绍
  3. 《THE INTERNET OF THINGS(From RFID to the Next-Generation Pervasive Networked Systems)》一书简要翻译
  4. shell浮点运算:前N分之一累加求和
  5. 类图用什么工具画_用SolidWorks画一个钣金外壳,主要是成形工具和特征库的使用...
  6. Python 三角形面积计算
  7. Flutter--自定义AppBar
  8. 允许多个用户以交互使用计算机的操作系统是,1允许多个用户以交互方式使用计算机的操作系统,称为(.doc...
  9. 华硕 幻14 无线 找不到WLAN解决方法
  10. keil软件之51与arm兼容性问题解决