牛客网刷题 | 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.hqwc.cn/news/660236.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冯喜运:5.1市场情绪:黄金前景看涨,原油是否跟进?

【黄金消息面分析】&#xff1a;周二(4月30日)欧洲时段&#xff0c;现货黄金继续偏弱走低态势&#xff0c;日被稍早一度下探2320关口下方&#xff0c;整体上看&#xff0c;在美联储决议公布前&#xff0c;市场的观望情绪依然浓厚。眼下并未有地缘局势引发避险推动金价上涨&…

二维码门楼牌管理应用平台:智慧城市的新引擎

文章目录 前言一、数据管理&#xff1a;打造智慧城市的数据基石二、数据应用&#xff1a;推动城市管理的智能化升级三、展望未来&#xff1a;构建更加智慧的城市管理体系 前言 随着城市化的快速推进&#xff0c;城市管理面临着前所未有的挑战。二维码门楼牌管理应用平台作为一…

C语言.自定义类型:结构体

自定义类型&#xff1a;结构体 1.结构体类型的声明1.1结构体回顾1.1.1结构体的声明1.1.2结构体变量的创建和初始化 1.2结构体的特殊声明1.3结构体的自引用 2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐2.3修改默认对齐数 3.结构体传参4.结构体实现位段4.1什么是位段4.2位…

不同路径 1 2

class Solution {public int uniquePaths(int m, int n) {int[][] dpnew int[m][n];//记录到每个格子有多少种路径for(int i0;i<m;i) dp[i][0]1;for(int j0;j<n;j) dp[0][j]1;//初始化for(int i1;i<m;i){for(int j1;j<n;j){dp[i][j]dp[i-1][j]dp[i][j-1];}}return …

实验15 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。 三、源代码以及执行结果截图&#xff1a; inputMenu.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> &…

day15 学一下Tailwindcss(java转ts全栈/3r教室)

目前距离全栈差得最多的是前端&#xff0c;而对于前端主要是CSS一直不熟悉&#xff0c;觉得很复杂写起来总是不上道&#xff0c;所以特别关注下Tailwindcss吧&#xff0c;其他前端框架可以先放放&#xff0c;多说无益直接用tailwindcss做个页面试试 看下文档&#xff1a;Tailwi…

C语言面试题之相交链表

相交链表 实例要求 1、给定两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。2、如果两个链表不存在相交节点&#xff0c;返回 null 。示例&#xff1a; 实例分析 可以使用两种方法&#xff1a;哈希表方法和双指针方法。哈希表方法…

利用Argo数据分别计算温度、盐度和温盐所造成的比容海平面变化

本文所用到的温盐数据集&#xff1a;IPRC&#xff08;美国夏威夷大学国际太平洋研究中心&#xff09; Argo data products | Argo (ucsd.edu)https://argo.ucsd.edu/data/argo-data-products/ 理论知识&#xff08;相关计算公式&#xff09;&#xff1a; 代码和工具包准备&…

芒果超媒财报解读:科技加持下,如何蜕变为内容“全科生”?

在降本增效和内容为王的基调下&#xff0c;国内头部长视频平台正在拥抱增长。 爱奇艺率先公布2023年财务数据&#xff0c;实现归母净利润19.25亿元&#xff0c;与2022年亏损1.36亿元相比&#xff0c;扭亏为盈且增幅显著。 而近日&#xff0c;随着新一季《浪姐》播出&#xff…

git 的迁移

现象是gitlab经常会挂掉&#xff0c;linux会显示磁盘空间不足&#xff0c;实际上&#xff0c;我们linux某个目录的空间是4T。这个空间应该是足够的。猜测是gitlab的安装目录不对导致的空间不足。 1、查找原因 用rpm 安装gitlab会有自己的目录&#xff0c;很多安装文件会在opt…

如何更好的使用cpm

nvidia发布了RAFT库&#xff0c;支持向量数据库的底层计算优化&#xff0c;RAFT 也使用CMake Package Manager( CPM )和rapids-cmake管理项目&#xff0c;可以方便快捷的下载到需要的对应版本的thirdparty的依赖库&#xff0c;但是&#xff0c;一般情况下&#xff0c;项目是直接…

nacos(docker部署)+springboot集成

文章目录 说明零nacos容器部署初始化配置高级配置部分访问权限控制命名空间设置新建配置文件 springboot配置nacos添加依赖编写测试controller 说明 nacos容器部署采用1Panel运维面板&#xff0c;进行部署操作&#xff0c;简化操作注意提前安装好1Panel和配置完成docker镜像加…