【C语言】字符串小练习(每日小细节012)

news2024/9/21 4:24:28

前言:

欢迎打开这篇博客,从今天开始,每天和大家分享一个C语言小细节,不久之后还会追加C++

一些常常被忽视的小细节和思想统一的编程题目是这个专栏的核心哦

虽然简单但千万别在细节处失分!!!!

每日花一两分钟浏览一下加深一个知识点不香吗

感兴趣的赶紧收藏关注起来吧,不要迷路~

我们今天主要练习一些数组,字符串的小题和编程题,对这部分还不是很了解的小伙伴可以去看数组指针,指针数组一锅粥,二级指针深度理解(附编程题练习)

当然如果很基础的数组知识也有所遗忘的话可以去

 

一维数组和二维数组的命名以及存储空间

1. 

 这段代码的输出是什么?

首先s是指针数组,数组的每一个元素是字符串首字母的地址,函数传参之后p就是s的临时拷贝,本质还是一样的,p[1]就代表s中第一个字符串(“ABCD”)的首字母地址,p[i],i每++,就是跳过一个首字母地址,也就是跳过一个字符串,所以p[0],p[1],p[2],p[3]就是字符‘A’‘E’‘I’‘M’的地址

打印以%s的格式,看到s[i](p是s的临时拷贝,没有本质区别)中存放的地址,输出s[i]存储的指针指向的字符串。

所以最后结果就是 字符‘A’‘E’‘I’‘M’ 为首的四个字符串


2.

 A:拿到数组第一个元素的地址,a[0][0]代表一个元素,+5就是跳过五个元素,又a数组是3行4列(都是下标从0开始)所以指向a[1][1]的地址,解引用找到

B:a数组除了可以表示一个二维数组的名字还可以把a理解成里面存放四个行向量首元素的地址,也就是每一行第一个元素的地址,所以a后面什么都不加就表示第一行第一个元素的地址,+1跳到下一行(因为指针+-数字是看指针的类型是什么,+-之后就跳过多少个同类型的元素)

*(a+1)解引用来到第二行现在的元素类型变成原数组元素的地址,+1就是找到第二行第二列的元素地址然后解引用就可以

C,D:区别就在要不要&

如果不加&就a[1]表示第二行的首元素地址,直接+1又跳过一个元素,完美找到第二行第二个元素

但是加上&,  a[1]就表示a[1][0]的地址,又加上&想表示什么?地址的地址,那么+1就跳过一行,走远了

所以C选项错误


3.

 A选项,f(a)传参时,a会退化成指向其首元素的地址,类型是 int*,不符。

B选项,b是二维数组,传参时会退化成指向其首元素的指针,也就是b[0]的地址,b[0]的类型是int [4],故&b[0]类型是int(*)[4],不符。

D选项,&a是数组a的地址,其类型是int(*)[4],不符。

C选项,q是一个指针数组,在初始化时用b[0]、b[1]、b[2], 此时b[0]、b[1]、b[2]会退化成指向各首元素的指针(int* 类型,因此类型符合,可以用它们初始化)。q传参时,退化成指向其首元素的指针,即 int**,符合


4.NC31 第一个只出现一次的字符 牛客传送

 

不知道大家记不记得之前在刷剑指offer的时候,就有相似的方法是对于字符串吗,用一个大小为128的数组记录每一个字符出现的次数,出现一次就在对应码值下标的位置++,本题也是类似

int FirstNotRepeatingChar(char* str ) {
    // write code here
    //int a[128]={0};
     int a[128]={0};
     int t=0;
     for(int i=0;*(str+i)!='\0';i++)
     {
        t=*(str+i);
        a[t]++;
     }
     for(int i=0;*(str+i)!='\0';i++)
     {
        t=*(str+i);
        if(a[t]==1)
        return i;
     }
    
    return -1;
}

 还有一个极其相似的题目

判定字符是否唯一力扣传送

 

 其实就是最后的判断条件不太一样,简直是原题

bool isUnique(char* astr){
 int a[128] = { 0 };
    int t = 0;
    for (int i = 0; *(astr + i) != '\0'; i++)
    {
        t = *(astr + i);
        a[t]++;
    }
    for (int i = 0; *(astr + i) != '\0'; i++)
    {
        t = *(astr + i);
        if (a[t] != 1)
            return false;
    }

    return true;
}

今天的小细节分享就到这里了,希望你真的对二维数组有更多的了解

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

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

相关文章

【Linux编辑神器:vim】

目录 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim底行模式命令集 5. 简单vim配置 6 总结 什么是Vi/Vim? vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令&#xff0…

【算法】关于双指针的奇技淫巧(一):对撞指针

一、对撞指针 对撞指针由两个指针组成,分别指向数据的头部和尾部: 两个指针分别从两头移动,寻找符合答案的位置后停下。对撞指针主要应用于有序数组的求和,我们使用一个题目进行说明: 示例如下: 根据题目可…

元数据管理Datahub基本介绍和特点

目录1. 基本介绍2. 功能特色2.1 支持不同平台的元数据同步和搜索2.2 血缘关系2.3 查询数据集的统计信息2.4 实时治理2.5 Datahub的权限管理2.6 使用Domains、Glossary Terms、tags对数据Entity进行管理2.7 在Web界面对元数据进行管理1. 基本介绍 Datahub是现代数据栈的元数据管…

TypeScript(一)TypeScript下载安装,编译运行的三种方式:tsc命令行/webpack搭建环境/tsc-node库

什么是TypeScript? TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。 简单理解:TypeScript就是加强版的JavaScript TypeScript环境搭建 搭建前准备 TypeScript最终会被编译成JavaScript代码,那么我…

JavaSE笔记——函数式编程(类库)

文章目录前言一、基本类型二、重载解析三、FunctionalInterface四、默认方法五、Optional总结前言 前面知道了如何编写 Lambda 表达式,下面将详细阐述另一个重要方面:如何使用 Lambda 表达式。即使不需要编写像 Stream 这样重度使用函数式编程风格的类库…

find_package()的使用

find_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到,后续只管用就好了。但实际中往往CMake失败就是出在find_package()的失败上(这里不考…

朝花夕拾 - 2023 莽一年

Hello 2023,我来了~今年,又是一个怎样的楚门世界,我要如何在里面撒泼,期待~一 回收 2022 不及格答卷 回首 2022,那真的不堪回首,细节太多了,没做好没把握住~但是,不管 2022 过得怎样…

Qt6 中如何使用 qsb

【写在前面】 Qt 5 的图形体系结构非常依赖 OpenGL 作为底层 3D 图形 API。但过去 8 年来随着 Metal 和 Vulkan 的推出,市场发生了巨大变化。现在,Qt 6 加入了大量不同平台的图形 API,以确保用户可以在所有平台上以最高性能运行 Qt。 在 Qt Q…

【类和对象(完结)】

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 2. static成员 2.1 概念 2.2 特性 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 7. 再次理解类和对象 8.总结 1. 再谈构造函数 1.1 构造函数体…

技术分享| 如何使用Prometheus实现系统进程监控

如何监控线上正在运营的系统?如何得知系统目前是正常还是异常? Prometheus是这么一套数据监控解决方案。它能让运维及开发人员随时掌控系统的运行状态,快速定位出现问题的位置,快速排除故障。只要按照 Prometheus的方式来做&#…

力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《258. 各位相加、263.丑数、268.丢失的数字》。 目录 25…

第三十五讲:神州无线局域网基础知识

1. IEEE 802.11协议 802.11无线标准家族包括802.11a/b/g/n/ac五个标准理论上可以提供高达每秒1Gbit的数据传输能力标准定义了如何使用免授权2.4 GHz 和 5GHz 频带的电磁波进行信号传输。 802.11无线标准家族 802.11a 802.11b 802.11g 802.11n 802.11ac 工作频段 5GHz 2…

内存访问为什么要分段?

内存分段是处理器为访问内存而设计的机制,称为内存分段机制。 简单的内存知识 内存结构(连续且地址依次升高) 访问方式 内存是随机读写设备,即访问其内部任何处,不需要从头开始找,只要直接给出其地址便可。…

【项目启动】IDEA新建项目同步到Github

文章目录SSH秘钥检查GitHub创建项目IDEA创建项目IDEA同步GitHubSSH秘钥检查 目前,github不支持https形式的远程同步方式,如果使用https形式进行同步会报以下错误: remote: Support for password authentication was removed on August 13, 2…

C# WinForm CAD文件显示(dxf,dwg显示)

找遍全网很难找到开源dxf显示控件(C# winform),大部分控件都需要收费,对于做软件开发很麻烦 C# WPF倒是有nefdxfZoomableCanvas可以实现,确实很方便,这个在github:https://github.com/shao200/WpfDxfViewer上也能找到开…

c++11 标准模板(STL)(std::deque)(六)

定义于头文件 <deque> std::deque 容量 检查容器是否为空 std::deque<T,Allocator>::empty bool empty() const; (C11 前) bool empty() const noexcept; (C11 起) (C20 前) [[nodiscard]] bool empty() const noexcept; (C20 起)检查容器是否无元素&#xff0c…

大数据NiFi(四):NiFi单节点安装

文章目录 NiFi单节点安装 一、介绍与下载 二、单节点安装

JavaWeb:JSP概述及原理

1&#xff0c;JSP概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java服务端页面。 是一种动态的网页技术&#xff0c;其中既可以定义 HTML、JS、CSS等静态内容&#xff0c;还可以定义 Java代码的动态内容&#xff0c;也就是 JSP HTML Java…

javaee之SpringMVC2

SpringMVC返回值类型以及响应数据类型 1.搭建环境 还是按照springMVC1中的搭建环境进行搭建。这里就不多说。 响应之返回值是String类型 我们先来创建一个User类 User,java package com.pxx.domain;import java.io.Serializable;public class User implements Serializab…

PS 矩形选区工具(1)基本用法 生成图层 选区方式演示讲解

我们先打开PS 然后打开一个项目 我们可以选择一个图层 然后 点击左上角 图像>调整>色相.饱和度 弹出操作框之后 我们拉动色相的色条 对应视图就会发生主体颜色的变化 然后 我们打开一个只有一个图层的图片项目 我们对这个图层操作 整个都会变化 但如果我只是想改其中…