牛客网刷题 | 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. 指针常量与常量指针:指针常量是一个指针,其值不能改变;常量指针是一个指向常量的指针,它指向的值不能改变。


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

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

  

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 23:40:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 23:40:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 23:40:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 23:40:03       20 阅读

热门阅读

  1. Spring 如何解决 Bean 循环依赖

    2024-04-30 23:40:03       12 阅读
  2. oracle regexp_replace的用法

    2024-04-30 23:40:03       10 阅读
  3. 制作和合入git补丁

    2024-04-30 23:40:03       12 阅读
  4. Go语言中如何实现协程同步

    2024-04-30 23:40:03       13 阅读
  5. 2 Spring IoC

    2024-04-30 23:40:03       13 阅读
  6. 01 C

    2024-04-30 23:40:03       12 阅读
  7. MySql 函数和表达式索引

    2024-04-30 23:40:03       12 阅读
  8. 【skynet】 网络编程之回显服务器

    2024-04-30 23:40:03       12 阅读