题目描述:判断第二个字符串中的元素是否都能在第一个字符串中找到:

注意:和字符串的字串的问题有所区别,如第一个字符串为  abcdefg,第二个字符串为 aaabc,第二个字串还是包含于第一个字符串

方法1:将str2中的每一个字符取出,逐一和字符串str1中的字符进行比较
#include <stdio.h> int WhetherInclude(char* str1, char * str2)
{
int ia;
int ib = 0; while(str2[ib] !='\0') //遍历str2
{
ia = 0;
while(str1[ia]!='\0') //遍历str1
{
if(str1[ia] == str2[ib])
break;
else
ia++; } if(str1[ia] == '\0') //如果经过前面的一次遍历在str1中还是没有找到相同的字符就返回false
return 0; ib++; //增量 来控制外循环 if(str2[ib] == '\0') //如果查到str2的最后一个字符都没问题的话
return 1; }
}
int main()
{
char str1[] ="abcdefg";
char str2[] ="adgc"; int a = WhetherInclude(str1, str2); //1代表str1包含str2;
printf("%d\n",a);
return 0; }

方法2,使用hash数组

#include <stdio.h>
#include<malloc.h>
#include<memory.h>
#include<assert.h> int WhetherInclude(char* str1, char * str2) //只能判断str2的字母是不是都在str1中,和子串的问题不一样
{
char * phash = (char *)malloc(256*sizeof(char)); //进行一些初始化的工作
assert(phash);
memset(phash, 0, 256); int i = 0;
while(str1[i-1] != '\0') //将str1在phash数组中映射一遍
{
phash[str1[i-1]] = 1;
i++;
} int j = 0;
while(str2[j-1] != '\0') //将str2和str映射后的表再映射一遍,发现为0的位即不包含
{
if(phash[str2[j-1]] == 0)
return 0;
j++;
}
return 1; }
int main()
{
char str1[] ="abcdefg";
char str2[] ="aaagc"; int a = WhetherInclude(str1, str2); //1代表str1包含str2;
if(a = 0)
printf("不是所有字符串str2中的字符在str1中都能找到!!!\n");
else
printf("所有字符串str2中的字符在str1中都能找到\n"); return 0; }

H面试程序(10): 字符串包含问题的更多相关文章

  1. H面试程序(11): 判断字符串是否包含子串问题

    题目描述:                        如字符串str1为''abcdef'''                       字符串str2为'' bc''; 则字符串str1中含有 ...

  2. H面试程序(12): 输出字符串中第一个只出现一次的字母

    题目描述: 若字符串str为'' sbdddsbfc'',则输出 f; 若字符串str为''aabbccdd'',则输出:字符串str中的字符都出现两次以上 #include <stdio.h& ...

  3. H面试程序(28):字符串处理转换

    //2 字符串处理转换 //问题描述: //在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成, //其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词): //找 ...

  4. H面试程序(27):字串转换

    //1 字串转换 //问题描述: //将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a: //若输 ...

  5. H面试程序(16): 简单选择排序

    #include<stdio.h> #include<assert.h> void display(int * a, int n) { assert(a); for(int i ...

  6. H面试程序(4):翻转句子中单词的顺序 .

    题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“I am a student.”,则输出“stude ...

  7. H面试程序(29):求最大递增数

    要求:求最大递增数 如:1231123451 输出12345 #include<stdio.h> #include<assert.h> void find(char *s) { ...

  8. H面试程序(15): 冒泡排序法

    #include<stdio.h> #include<assert.h> void display(int * a, int n) { for(int i = 0; i < ...

  9. H面试程序(1)编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的 下一秒

    编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒. 如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005年 1 月 1 日 0 时 0 分 0 秒. ...

随机推荐

  1. linux(vi)多行注释和取消注释.

    //comment1,'ctrl+v' to VISUAL BLOCK mode.2,'j' or 'k' to select/deselect lines.3,'I' to INSERT mode. ...

  2. Linux文件和目录操作管理命令

    1.pwd:显示工作目录路径 -p:显示实际物理路径 -l:显示链接路径 2.cd:更改工作目录路径 cd:进入用户主目录 cd~:进入用户主目录 cd-:返回进入此目录之前所在的目录 cd..:返回 ...

  3. 如何打开Windows Server 2003 内存寻址扩展

    本文介绍了如何在系统内存大于4G的情况下,让windows2003 Advanced Server支持大内存的方法: 由于Windows2003 32bit是32位操作系统,当服务器配备内存高达4G时 ...

  4. 如何修改TextField的Label和EmptyText

    在需求中常常有修改form表单的标签和空文本提示,在渲染后组件有些字符固定下来 除非使用document进行原始修改,通过查询stackflow,我介绍更方便方法 模拟场景:点击ChangeLabel ...

  5. xAML中一些控件的用法学习

    首先,介绍一些比较简单的设计,这些可以直接通过拖拽实现.如下例子: <Window x:Class="wpf1.MainWindow" xmlns="http:// ...

  6. C# linq的学习及使用

    linq可以对多种数据源和对象进行查询,如数据库.数据集.XML文档.数组等. 通过对linq的使用,可以减少代码量并优化检索操作. LINQ关键字 from 指定数据源和范围变量 where 根据布 ...

  7. 研究一下uucode编码

    uucode编码是把任意二进制数据转换为ascii字符的编码用于在一些只能传递文本的地方传送二进制数据uu模块提供了encode()和decode()用于将一个文件转换为uucode编码的字符文件,文 ...

  8. 转载:Java连接MySQL 数据库的正确操作流程

    转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html       以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...

  9. wamp目录索引图片不显示

    在wampserver安装目录下  \bin\apache\Apache2.2.21\conf\extra\httpd-autoindex.conf Alias /icons/ "c:/Ap ...

  10. Nginx源码研究一:NGINX模块启动

    Nginx 是一个轻量级,但是高性能的 HTTP 和 代理 服务器,也是一个 IMAP/POP3/SMTP代理服务器. 它的第一个版本0.1.0是由俄罗斯的工程师Igor Sysoev与2004年10 ...