nowcoder——删除公共字符

news2024/11/18 17:26:36

删除公共字符_牛客题霸_牛客网 (nowcoder.com) 

对于这个题其实就是删除字符串1中在字符串2中出现过的字符。我们来分析下解题步骤:


思路一:遍历字符串1,如果遍历到的字符在字符串2中出现,则将该字符之后的所有字符向前移一位。

覆盖掉e之后继续接着遍历字符串1,直到遍历结束,最后直接打印删除后的字符串1。 

思路二:创建一个新数组,遍历字符串1,如果字符串1中的字符没在字符串2中出现过,就存入新数组中,最后返回新数组

思路三:遍历字符串1,如果字符串1中的字符没在字符串2中出现过,则直接打印该字符,然后继续遍历。 

我们分析完思路后,思路一和思路二虽然可以完成要求,但是写起来还是有点复杂,所以我们直接实现思路三。 

    char arr1[100] = {0};
    char arr2[100] = {0};
    scanf("%s",arr1);
    scanf("%s",arr2);

可以利用scanf来输入字符串嘛?

不行!因为该字符串中会包含空格,scanf遇到空格就会停止读取,所以我们不能使用scanf来输入字符串。我们可以利用一个库函数gets——gets - C++ Reference (cplusplus.com),该函数的功能就是从标准输入流读取字符串。

下面附上代码:

#include <stdio.h>

int is_char_exist(char a,char arr[])
{
    //遍历字符串判断字符a是否在字符串中出现过
    int i = 0;
    while(arr[i])
    {
        if(arr[i] == a)
        {
            //如果相等则直接返回1,说明该字符在字符串2中出现了
            return 1;
        }
        i++;
    }
    return 0;
}

int main()
{
    char arr1[100] = {0};
    char arr2[100] = {0};
    gets(arr1);
    gets(arr2);

    int i = 0;
    while(arr1[i])//遍历字符串1
    {
        //判断该字符是否在字符串2中出现过
        //我们可以将这个步骤封装成一个函数
        if(is_char_exist(arr1[i],arr2) == 0)
        {
            //如果返回值为0,则说明没有出现过,打印该字符
            printf("%c",arr1[i]);
        }
        i++;
    }
    return 0;
}

我们利用了自己写的函数完成了判断字符在另一个字符串中是否出现的问题,而我们C语言标准库里面有一个函数也可以完成该功能——strchr strchr - C++ Reference (cplusplus.com).

该函数的作用是功能其实是返回字符在字符串中第一次出现的位置,如果字符没在该字符串中出现则返回NULL。所以我们也可以利用这个函数来完成我们判断字符是否在字符串中出现过的问题。

使用该函数要包含头文件<string.h>

    while(arr1[i])//遍历字符串1
    {
        //判断该字符是否在字符串2中出现过
        if(strchr(arr2,arr1[i]) == NULL)
        {
            //如果返回值为NULL,则说明没有出现过,打印该字符
            printf("%c",arr1[i]);
        }
        i++;
    }

我们在前面说scanf不能完成这里的字符串输入操作,其实是可以的,只是写法有点抽象。

scanf("%[^\n]s",arr1);

这样写scanf遇到空格就不会停止,直到遇到换行符。大家可以参考这篇大佬文章——关于 scanf(“%[^\n]%*c“,str);_"scanf(\"%[^\\n]%*c\",str);"-CSDN博客。

我们解决scanf读到空格就停止的问题后,是否可以直接连续读取两个字符串呢?我们试一下。

结果是错误的,这是为什么呢?难道真的不能用scanf嘛?

其实原因是第一个scanf读取结束后,缓冲区内有一个\n,第二个scanf就读到了\n,就直接结束了,所以第二个scanf什么都没有读到。

我们只需要在第一个scanf读取之后将缓冲区清空,在进行第二个scanf的读取就行了。

完! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[高质量]2024五一数学建模A题保奖思路+代码(后续会更新)

你的点赞收藏是我继续更新的最大动力&#xff0c;可点击文末卡片获取更多资料 你是否在寻找数学建模比赛的突破点&#xff1f; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024 年华东杯&#xff08;A题&#xff09;的全面解析包。这个解决方案包不仅包括完整的代…

[C语言]典型例题:小蚂蚁爬橡皮筋、买汽水问题、导致单词块、菱形打印……

1、小蚂蚁爬橡皮筋问题 假设橡皮筋长4m&#xff0c;小蚂蚁从一端爬向另一端每天爬1m&#xff0c;且每爬了1m&#xff0c;橡皮筋会立马拉伸4m&#xff0c;在理想条件下&#xff0c;小蚂蚁需要爬多少天可以到达橡皮筋的另一端&#xff1f; 不仔细想&#xff0c;我们很可能认为小蚂…

LeetCode 543.二叉树的直径

题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5]…

5个Python自动化EDA库

EDA或探索性数据分析是一项耗时的工作&#xff0c;但是由于EDA是不可避免的&#xff0c;所以Python出现了很多自动化库来减少执行分析所需的时间。EDA的主要目标不是制作花哨的图形或创建彩色的图形&#xff0c;而是获得对数据集的理解&#xff0c;并获得对变量之间的分布和相关…

OpenFeign修改HttpClient为Apache HttpClient 5

OpenFeign中http client 如果不做特殊配置&#xff0c;OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求&#xff0c; 由于默认HttpURLConnection没有连接池、性能和效率比较低。所以修改为Apache HttpClient 5。 总结为两步&#xff1a; 加依赖改yml 具体操作请往…

uniapp + uView动态表单校验

项目需求&#xff1a;动态循环表单&#xff0c;并实现动态表单校验 页面&#xff1a; <u--form label-position"top" :model"tmForm" ref"tmForm" label-width"0px" :rulesrules><div v-for"(element, index) in tmForm…

基于Springboot+Vue的Java项目-家政服务平台系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…

数据结构----顺序表详解

顺序表的定义 顺序表&#xff08;SeqList&#xff09;属于线性表的同一种&#xff0c;它同样具有线性的存储结构&#xff0c;以下是百度百科关于顺序表的定义&#xff1a; 总结下来&#xff0c; 在结构上&#xff0c;顺序表实际上的底层结构就是数组&#xff0c;而顺序表本身也…

链表-----返回倒数第K个节点回文结构的判断相交链表

目录 1.返回倒数第K个节点 2.回文结构的判断 3.相交链表的判断&#xff0c;返回交点 1.返回倒数第K个节点 &#xff08;1&#xff09;返回链表的第k个节点&#xff0c;我们这里的做法是定义两个指针&#xff0c;这两个指针之间相差的是k这个长度&#xff1b;这个过程的实现就…

网络安全知识点

网络安全 1&#xff0e; 网络安全的定义&#xff0c;网络安全的属性。 定义&#xff1a;针对各种网络安全威胁研究其安全策略和机制&#xff0c;通过防护、检测和响应&#xff0c;确保网络系统及数据的安全性。 属性&#xff1a;机密性 认证&#xff08;可鉴别性&#xff09…

手把手带你一起搭建Seata,结合SpringCloud alibaba实战(二)

手把手带你一起搭建Seata&#xff0c;结合SpringCloud alibaba实战&#xff08;二&#xff09; 前言具体实现大致流程配置微服务订单服务库存服务 测试订单服务异常库存服务异常 总结 接下来的一段时间论文解说要暂时放一放&#xff0c;咱们一起来了解下微服务方面的知识&#…

Web-SpringBootWeb

创建项目 后面因为报错&#xff0c;所以我把jdk修改成22&#xff0c;仅供参考。 定义类&#xff0c;创建方法 package com.start.springbootstart.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati…

使用nacos实现注册中心和配置中心

实现注册中心 在pom文件中导入 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 在bootstrap.yml中写下如下配置 spring:application:name: c…

安卓中对象序列化面试问题及回答

1. 什么是对象的序列化&#xff1f; 答&#xff1a; 序列化是将对象转换为字节流的过程&#xff0c;以便将其存储在文件、数据库或通过网络传输。反序列化则是将字节流重新转换为对象的过程。 2. 为什么在 Android 开发中需要对象的序列化&#xff1f; 答&#xff1a; 在 An…

一些优雅的监控运维技巧

准备工作 安装 sysstat sudo apt install sysstat查看某个进程的cpu情况 pidstst -u -p 256432查看某个进程的RAM情况 pidstst -r -p 256432查看某个进程的IO情况 pidstst -d -p 256432查看某个进程下的线程执行情况 pidstst -t -p 256432查看指定PID的进程对应的可执行文件…

2024五一杯数学建模C题思路分享 - 煤矿深部开采冲击地压危险预测

文章目录 1 赛题选题分析 2 解题思路2.1 问题重述2.2 第一问完整思路2.2 二、三问思路更新 3 最新思路更新 1 赛题 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动…

前端开发攻略---用原生JS在网页中也能实现文本转语音

1、原理 语音合成 (也被称作是文本转为语音&#xff0c;英语简写是 tts) 包括接收 app 中需要语音合成的文本&#xff0c;再在设备麦克风播放出来这两个过程。 Web API中对此有一个主要控制接口 SpeechSynthesis&#xff0c;外加一些处理如何表示要被合成的文本 (也被称为 utte…

6.C++模板(超全)

// 【思考】代码截屏&#xff0c;用荧光笔标写注释 挺清晰的&#xff0c;虽然不太整齐了&#xff08;在文末有尝试这种方法~&#xff09;&#xff0c;就是感觉 // 注释没有那么突出和强调&#xff0c;友友们要不讨论一下&#xff0c;不知道你们看起来是什么感觉&#xff0c;我…

Python 与 TensorFlow2 生成式 AI(一)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 “想象力比知识更重要。” – 阿尔伯特爱因斯坦&#xff0c;《爱因斯坦关于宇宙宗教和其他见解与格言》&#xff08;2009&#xff09;…