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

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

        专栏如下:                 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.mfbz.cn/a/585448.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode297_二叉树的序列化与反序列化

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xf…

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

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

RTMP 直播推流 Demo(一)—— 项目配置与视频预览

音视频编解码系列目录&#xff1a; Android 音视频基础知识 Android 音视频播放器 Demo&#xff08;一&#xff09;—— 视频解码与渲染 Android 音视频播放器 Demo&#xff08;二&#xff09;—— 音频解码与音视频同步 RTMP 直播推流 Demo&#xff08;一&#xff09;—— 项目…

使用JNI机制加载本地方法的小案例

JNI 最近在学习Android&#xff0c;其中需要使用到c的库&#xff0c;这个时候就要使用到JNI机制了&#xff0c;简单来说&#xff0c;就是可以通过这个机制&#xff0c;让java代码可以调用本地c语言编写的代码&#xff0c;将c语言编写的代码打包成动态库&#xff0c;然后&#…

Java面试重点之反射机制

一、 反射是什么&#xff1f; 允许程序在运行时查询和操作对象的类型信息。通过反射&#xff0c;程序能够在运行时获取对象的类定义信息&#xff0c;如类的名称、方法、字段、注解等&#xff0c;并且可以动态地调用对象的方法或访问其字段&#xff0c;而无需在编译时具体知道对…

CarEye 智能叉车管理系统

CarEye 团队在智能车辆管理平台基础上&#xff0c;专门针对叉车管理特殊性开发了叉车管理系统。以下是叉车管理系统的一些主要介绍&#xff1a;

跟TED演讲学英文:Innovating to zero! by Bill Gates

Innovating to zero! Link: https://www.ted.com/talks/bill_gates_innovating_to_zero Speaker: Bill Gates Date: February 2010 文章目录 Innovating to zero!IntroductionVocabularyTranscriptQ&A with Chris AndersonSummary后记 Introduction At TED2010, Bill Ga…

深度学习突破:LLaMA-MoE模型的高效训练策略

在人工智能领域&#xff0c;大模型&#xff08;LLM&#xff09;的崛起带来了前所未有的进步&#xff0c;但随之而来的是巨大的计算资源需求。为了解决这一问题&#xff0c;Mixture-of-Expert&#xff08;MoE&#xff09;模型架构应运而生&#xff0c;而LLaMA-MoE正是这一架构下…

环形链表题

1.环形链表1 看题&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;哈希表 遍历所有节点&#xff0c;每次遍历一个节点时&#xff0c;判断该节点是否被访问过。 可以使用哈希表来存储所有已经访问过的节点。每次到达一个节点&#xff0c;如果该节点已…

windows查看nginx是否启动

windows查看nginx是否启动 1.通过命令提示符: 打开命令提示符&#xff08;CMD&#xff09;。您可以通过按下WinR键&#xff0c;然后输入“cmd”并按下Enter键来打开命令提示符窗口。 输入命令 tasklist /fi “imagename eq nginx.exe”。如果命令执行后能看到nginx进程&#x…

【DeepL】菜鸟教程:如何申请DeepL免费API并使用Python的DeepL

前言 在这篇技术博文中,我们将介绍如何利用DeepL的强大功能,通过其免费API在Python项目中实现高质量的文本翻译。我们将从基础开始,解释DeepL是什么,它的用途,如何申请免费API,以及如何在Python中使用DeepL库。 什么是DeepL? DeepL是一个基于人工智能的翻译服务,它以…

RocketMQ MQTT 快速搭建验证

来自业务的需求&#xff0c;需要快速搭建一套支持 MQTT 协议的消息系统。 前期准备&#xff1a; 官方地址&#xff1a;https://github.com/apache/rocketmq-mqtt RocketMQ从4.9.3 版本开始才支持该功能&#xff0c;所以需要先检查 RocketMQ 的版本是否满足。 RocketMQ 部署参…

Java同时使用@RequestBody和@RequestParam传参在postman中执行请求报错:Unsupported Media Type

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Laravel5.4 反序列化

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

神之浩劫2下载教程 MOBA新游神之浩劫2在哪下载/怎么下载

《神之浩劫2Smite 2》重新定义了MOBA游戏的征服模式&#xff0c;为玩家带来更多的互动和进展。最近的开发者深度挖掘展示了游戏地图的全新设计&#xff0c;既简化了基本操作&#xff0c;又丰富了游戏选择。游戏中的敌人也有了新的进展方式。例如&#xff0c;击败火巨人和金之怒…

【深度学习基础(1)】什么是深度学习,深度学习与机器学习的区别、深度学习基本原理,深度学习的进展和未来

文章目录 一. 深度学习概念二. 深度学习与机器学习的区别三. 理解深度学习的工作原理1. 每层的转换进行权重参数化2. 怎么衡量神经网络的质量3. 怎么减小损失值 四. 深度学习已取得的进展五. 人工智能的未来 - 不要太过焦虑跟不上 一. 深度学习概念 先放一张图来理解下人工智能…

powershell 注册全局热键——提升效率小工具

powershell 注册全局热键 01 前言 在处理一些重复工作问题的时候&#xff0c;想搞一个小工具&#xff0c;配合全局快捷键来提高效率。因为是Windows系统&#xff0c;想到C#&#xff0c;但是又不想用VS开发&#xff0c;因为那样不够灵活&#xff0c;没办法随时修改随时用&…

Spring ai 快速入门及使用,构建你自己的ai

第一步&#xff1a;创建springboot项目 jdk必须是17及以上 1.8用不了 第二步 选择web和ai的依赖 选择openai 第三步 需要配置openai key 配置 分享个免费或的apikey的地方New API 会免费赠送1刀的token spring.application.namespringAI spring.ai.openai.base-urlhttps://ap…

推荐一个好用的命令行工具ShellGPT

ShellGPT 配置安装常用功能聊天写命令并执行 高级功能函数调用角色管理 总结 这两天突然想到&#xff0c;现有的很多工具都在被大模型重构&#xff0c;比如诞生了像perplexity.ai 这种新交互形式的搜索引擎&#xff0c;就连wps也推出了AI服务&#xff0c;甚至都可以直接生成ppt…

JavaScript转换和校验数字

本节我们使用的案例还是继续之前的银行家应用程序&#xff0c;只不过我们呢增加了两个账号&#xff0c;代码如下&#xff1a; const account1 {owner: Jonas Schmedtmann,movements: [200, 455.23, -306.5, 25000, -642.21, -133.9, 79.97, 1300],interestRate: 1.2, // %pin…
最新文章