牛客网刷题 | CC1 获取字符串长度

news2025/1/12 21:07:50

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。

输入描述:

键盘输入一个字符串

输出描述:

输出字符串的长度


思路 : 

创建一个数组用来存放打印的字符

进行函数的调用

将数组的首字符地址传入进指针里

接着由while循环来判断是否读取到 \0

因为 \0 是数组结束的标志

然后使用计数器

来计数 


代码 1 :

#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>

void get_line(char* p)    //  将arr的首字符的地址传进了函数
{
    int count = 0;      //用来计数 判断有多少个字符

    while (*p++ != '\0')  //用来判断 当 *p 不为\0 的时候 
                         //就进入while循环来判断 有多少个字符
                         //当*p为\0的时候 就不进入了 说明 字符已经寻找完了
    {
        count++;
    }
    printf("%d", count);
}

int main()

{
    char arr[100] = {0};//字符数组 初始化

    scanf("%[^\n]", arr);//%[^\n]的意思是在遇到回车之前不断输入

    get_line(arr);//将数组传递给 get_line 函数里面去

    return 0;
}

 代码 2:

#include<stdio.h>
int main()
{   
      char *a;//先定义个字符指针
      char a1[100]={0};
      scanf("%[^\n]",a1);//%[^\n]的意思是在遇到回车之前不断输入
      a=a1;//将已输入的数组的地址交给字符指针
      int cnt=0;
     while(*a!='\0'){//当*a不等于0时即数组还没有到最后一项时让计数器记录起来
         cnt++;
         a++;//让指针指向字符数组的下一项
     }
      printf("%d",cnt);
    return 0;
}

代码 3:

#include <stdio.h>
#include <string.h>

int my_strlen(char *arr, int sz) {
//	char *p = arr;
	int cnt = 0;
	int count = 0;
	while (*arr != '\0') {
		arr++;
		cnt++;
	}
//	for (int i = 0; i < sz; i++) {
//		if (arr[i] == ' ') {
//			count++;
//		}
//	}
	return cnt;
}

int main(void) {
	char arr[20] = {0};
	scanf("%[^\n]",arr);
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = my_strlen(arr, sz);
	printf("%d", ret);
	return 0;
}

代码 4 :

#include <stdio.h>

int main() {
    char str[100]; // 假设输入的字符串不会超过99个字符
    char *ptr = str; // 初始化字符指针指向字符串的开始位置
    int length = 0; // 初始化长度计数器

    // 从键盘读取字符串
    scanf("%99s", str); // 限制输入长度,防止缓冲区溢出

    // 使用字符指针遍历字符串并计算长度
    while (*ptr != '\0') {
        length++; // 每次循环,增加长度计数器
        ptr++; // 移动指针到下一个字符
    }

    // 输出字符串的长度
    printf("%d\n", length);

    return 0;
}

知识点: 

  1. 指针定义:指针是一个变量,其存储的是另一个变量的内存地址。

  2. 指针变量声明:使用 type *var_name; 的形式声明一个指针变量,其中 type 是指针指向的数据类型。

  3. 指针初始化:指针变量应该被初始化为一个有效的地址或者 NULL

  4. 地址操作符 &:用于取得变量的内存地址。

  5. 解引用操作符 *:用于访问指针指向的内存地址中存储的值。

  6. 指针的算术:可以对指针进行加法和减法操作,指针的值会按照所指向数据类型的字节大小进行增减。

  7. 指针与数组:数组名在大多数表达式中会被解释为指向数组首元素的指针。

  8. 指针数组:一个数组,其元素都是指向相同或兼容类型的指针。

  9. 函数指针:指针可以指向函数,这样就可以通过指针调用函数。

  10. 动态内存分配:使用 malloccallocreallocfree 等函数在堆上动态分配和管理内存。

  11. 指针与字符串:在C语言中,字符串字面量存储在只读内存中,字符串的末尾以空字符 \0 结束。字符串可以通过字符数组和字符指针来处理。

  12. 指针类型转换:可以使用类型转换操作符 (type *) 将一个指针转换为另一种类型的指针。

  13. 空指针 NULL:一个指针可以被赋予 NULL 值,表示它不指向任何地址。

  14. 指针的指针:可以定义一个指向指针的指针,这在处理多维数组或动态数据结构时非常有用。

  15. 指针与结构体:指针可以用来访问和操作结构体中的成员。

  16. 指针的比较:可以比较两个指针是否相等或不等,或者它们所指向的地址的大小。

  17. 指针数组和多维数组:指针数组可以用来模拟多维数组,每个指针指向一个一维数组。

  18. 指针安全:指针操作需要小心,不当的指针使用可能导致程序崩溃或安全漏洞。

  19. 指针与引用传递:在函数中,通过指针传递参数可以避免复制大的数据结构,提高效率。

  20. 指针常量与常量指针:指针常量是一个指针,其值不能改变;常量指针是一个指向常量的指针,它指向的值不能改变。


知识点先列举这么多,指针知识点比较复杂

待我写博客来慢慢详细叙述。 

  

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

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

相关文章

redis故障中出现的缓存击穿、缓存穿透、缓存雪崩?

一、背景&#xff1a; 在维护redis服务过程中&#xff0c;经常遇见一些redis的名词&#xff0c;例如缓存击穿、缓存穿透、缓存雪崩等&#xff0c;但是不是很理解这些&#xff0c;如下就来解析一下缓存击穿、缓存穿透、缓存雪崩名词。 二、缓存穿透问题&#xff1a; 常见的缓存使…

update_min_vruntime()流程图

linux kernel scheduler cfs的update_min_vruntime() 看起来还挺绕的。含义其实也简单&#xff0c;总一句话&#xff0c;将 cfs_rq->min_vruntime 设置为&#xff1a; max( cfs_rq->vruntime, min(leftmost_se->vruntime, cfs_rq->curr->vruntime) )。 画个流…

Laravel5.4 反序列化

文章目录 0x01 环境搭建0x02 POP 链0x03 exp0x04 总结 前言&#xff1a;CC 链复现的头晕&#xff0c;还是从简单的 Laravel 开始吧。 laravel 版本&#xff1a;5.4 0x01 环境搭建 laravel安装包下载地址 安装后配置验证页面。在 /routes/web.php 文件中添加一条路由&#xf…

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的&#xff0c;每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…

在Primavera P6 中维护自定义活动栏

前言 自从 Henry Gantt 在 1910 年左右提出这个想法以来&#xff0c;以图形方式显示项目进度表并沿时间刻度显示条形图一直延续到当今最复杂和流行的项目进度系统中。在本文中&#xff0c;我们将仔细研究 Primavera P6 Professional 中的甘特图&#xff0c;并探索一些自定义其…

一天狂涨2000亿的谷歌,看到了AI商业化的曙光

“人工智能是有史以来最深刻的平台变革之一&#xff0c;谷歌依旧会成为第一。” &#xff0d;谷歌CEO桑达尔皮查伊 在2024年一季度财报发布后&#xff0c;谷歌盘后涨超10%&#xff0c;终于站稳加入了“2 万亿美元俱乐部”。 从财报数据来看&#xff0c;谷歌一季度总营收805.4…

新手开通抖音小店的时候,必须要注意的6点!建议收藏!

大家好&#xff0c;我是电商小V 今天咱们就来详细的说一下开通抖音小店的时候需要注意的事项&#xff0c;避免咱们在开店的时候踩坑导致店铺后期的正常运营&#xff0c; 第一点&#xff1a;是关于营业执照的问题 营业执照咱们都知道&#xff0c;分为个体和企业的&#xff0c;咱…

正态分布的参数及意义

正态分布&#xff0c;也称为高斯分布&#xff0c;是统计学中最重要的分布之一&#xff0c;具有许多重要的特性。正态分布的参数包括均值&#xff08;μ&#xff09;和标准差&#xff08;σ&#xff09;&#xff0c;有时也使用方差&#xff08;σ^2&#xff09;来描述。下面是这…

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内&#xff0c;有组织的&#xff0c;可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储&#xff0c;具有较小的冗余性&#xff0c;较高的独立性和易扩展性&#xff0c;并为…

[单机]仿官武林外传飞羽完美版本_附带GM工具_虚拟机架设_视频教程

概述 今天给大家带来一款单机游戏架设教程&#xff0c; 仿官武林外传飞羽完美版本 演示视频 [单机]仿官武林外传飞羽完美版本_附带GM工具_虚拟机架设_ 环境准备 windows电脑一台&#xff0c;安装好vmvare12虚拟机 &#xff0c;安装教程和激活码获取 githubs.xyz/boot?app3…

javase学习01-GUI设计中的菜单条,菜单及菜单项(简单的实现)

目录 一&#xff0c;效果及代码 二&#xff0c;相关内容 1&#xff0c;创建图片资源文件夹 2&#xff0c;菜单初识 3&#xff0c;图标大小设置 4&#xff0c;菜单高度设置 今天学习了Java的GUI&#xff08;graphics user interface&#xff09;图形用户界面中的窗口和菜单…

超市购物|基于SprinBoot+vue的超市购物系统(源码+数据库+文档)

目录 基于SprinBootvue的企业人事管理系统 一、前言 二、系统设计 三、系统功能设计 1商品管理 2公告管理 3公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

FR-TSN4206获得“时间敏感网络产业链名录计划”测试认证证书,TSN交换机助力智能工业发展

TSN技术&#xff0c;即时间敏感网络技术&#xff0c;已成为智能工业、自动驾驶等领域的核心。它通过时钟同步、数据调度等功能&#xff0c;确保低延迟、高可靠性的数据传输。 为推动TSN技术在我国的发展&#xff0c;工业互联网产业联盟联合多家单位启动了“时间敏感网络产业链名…

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers&#xff0c;对这种请求&#xff0c;会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏&#xff0c;一起随我来看看吧 游戏效果&#xff1a; 实现基本的功能&#xff1a; • 贪吃蛇地图绘制 • 蛇吃⻝物的功能&#xff1a;&#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

docker搭建nacos集群并用mysql做持久化

1、首先需要准备四台机器&#xff0c;其中三台用于集群构建&#xff0c;IP地址分别为&#xff1a;IP1,IP2,IP3&#xff0c;一台用于mysql&#xff0c;IP地址为IP4 2、需要找到另外一台机器搭建mysql&#xff0c;用于持久化配置&#xff0c;并且新建数据库nacos_config&#xff…

CarrierConfig 加载流程和配置覆盖问题

问题 有的MVNO卡没有配置过 CarrierConfig及相关 overlay,但是实际运行的时候功能被override了 ,此时可能是因为CarrierConfig用了父类(同MCCMNC等情况)的配置,因此在直接查找对应卡cid或mccmnc+mvno属性时候的CarrierConfig是没办法找到影响功能的配置项的。 代码逻辑 …

服务器数据恢复—异常断电导致RAID模块故障的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌ProLiant DL380系列服务器&#xff0c;服务器中有一组由6块SAS硬盘组建的RAID5阵列&#xff0c;WINDOWS SERVER操作系统&#xff0c;作为企业内部文件服务器使用。 服务器故障&#xff1a; 机房供电几次意外中断&#xff0c;服务器出现故…

Socket编程--TCP连接以及并发处理

流程图 网络传输流程&#xff1a; TCP连接&#xff1a; api 客户端&#xff1a; socket: 创建套接字 domain: AF_INET &#xff1a;IPv4 type: SOCK_STREAM(tcp)、SOCK_DGRAM&#xff08;udp&#xff09; protocol: 0 默认协议 返回值&#xff1a;成功返回一个新的套接字…

RakSmart站群服务器租用注意事项科普

随着互联网的飞速发展&#xff0c;站群运营成为越来越多企业和个人的选择。而RakSmart作为知名的服务器提供商&#xff0c;其站群服务器租用服务备受关注。在租用RakSmart站群服务器时&#xff0c;源库建议有一些关键的注意事项需要特别留意&#xff0c;以确保服务器的稳定运行…