0


从第一字符串中删除第二个字符串中所有的字符。

题目
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入 ”They are students.” 和 ”aeiou” ,
则删除之后的第一个字符串变成 ”Thy r stdnts.”

思路
str1:They are students.
str2:aeiou
step1:由于ASCII码的所有符号为256个(包括了拓展表),创建一个数组a[256]初始化为0,str2中出现的字符对应为1。a数组将字符的ACALL码作为下标。
str2字符串:“aeiou”,对应的ascii码分别为97,101,105,111,117,将数组a[97],a[101],a[105],a[111],a[117]的值赋值为1,其他为0;
str2[0]就是第一个字符a,当它作为数组下标时,即为字符a的ascall码,即:a[97]=1;
在这里插入图片描述

for(i =0; i <strlen(str2);++i){
    a[str2[i]]=1;printf("%d", str2[i]);// 97printf("%c", str2[i]);// a}

step2:判断str1中是否包含
定义两个指针,p1 p2
p1指向str1字符串
p2指向str2字符串(存放最终的结果)
以str1中的每个字符的ascall码为数组a 的下标索引,判断所对应的元素是否为1,若为1,则说明,str1中有str2的元素,若为0,则没有。

char*p1 = str1;while(*p1){printf("%c\n",*p1);// T // T ascall码为84,a[84] 是否为0,若为0,则说明T不在str2中出现if(a[*p1]==0){// 将T这个元素给p2*p2=*p1;
            p2++;// p2指向下一个位置}
        p1++;// 判断str1中第二个元素}// while循环结束后,说明str1中的元素都已被判断// p2中放的最终的结果,最后给字符串结尾。*p2 ='\0';

完整代码

#include<stdio.h>#include<stdlib.h>#include<string.h>#pragmawarning(disable:4996)intDeletePre(char*str1,char*str2){char*p1 = str1;char*p2 = str2;int a[256]={0};for(int i =0; i <strlen(str2); i++){
        a[str2[i]]=1;}while(*p1){if(a[*p1]==0){*p2 =*p1;
            p2++;}
        p1++;}*p2 ='\0';return str2;}intmain(){char str1[]="They are students.";char str2[]="aeiou";DeletePre(str1, str2);printf("%s\n", str2);system("pause");return0;}
标签:

本文转载自: https://blog.csdn.net/weixin_50901244/article/details/119819928
版权归原作者 HH~LL 所有, 如有侵权,请联系我们删除。

“从第一字符串中删除第二个字符串中所有的字符。”的评论:

还没有评论