【C语言】题目10 - 请输入字符—统计你输入请输入字符—统计你输入了多少个字符!(三种方法求解)不允许使用 strlen()库函数。

371 阅读3分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

前言

今天开始刷C语言的 Question 10,距离100题还差仅仅90题,看似很多实际上也没多少!

题目描述

请输入字符—统计你输入了多少个字符!(三种方法求解)不允许使用 strlen()库函数。

题目解析

从这道题目我们可以知道几个有效信息,如下:
首先查找本题目的关键字 输入。
这个输入实际上就是输入函数,我们要明确输入函数有哪些!
scanf()、getchar()、gets()。
如果对以上的输入函数不了解的话,可以去查下这些函数的相关功能!

然后就是进行统计,可以使用 Count++,利用字符串结束标志!='\0',进行while()条件的循环表达式,如果最终字符串是遇到'\0'那么就可以结束表达式,最终进行打印Count结果。

那么以上就是对本道题目的分析。

gets 和 scanf 的区别。

scanf():不能接受空格、制表符Tab、回车等; 当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。 可以读取所有类型的变量。

 gets(): 能够接受空格、制表符Tab和回车等; 可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中 ,用到读取字符串,用回车结束输入。

题目代码

1:用 scanf() 函数来解本道题目。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	char enter[20] = { 0 };
	char *etter1 = enter;
	unsigned int Count = 0;//统计字符不可能是为负数的!
	printf("请输入字符串:");
	scanf("%s", &enter);
	//1.输入条件以完成!
	while (*etter1 != '\0')
	{
		Count++;
		*etter1++;
	}
	printf("The total number of input strings:%d\n", Count);
	//2.统计字符串条件完成!
	return 0;
}

注意:这个方法固然是可以统计字符串的,但是它有个问题就是遇到空格的话就是会结束统计,例如输入字符:AB C。此时的运行结果本因该是4,但是它只会是2。因为在空格前面它就已经停止计算了。

2:用 getchar() 函数来解本道题目。

#include <stdio.h>

int main(void)
{
	int count = 0; // count 用于Excel中对给定数据集合或者单元格区域中数据的个数进行计数

	printf("请输入一行字符:");

	while (getchar() != '\n') // 它从标准输入里读取数字 while进行循环
	{
		count = count + 1;
	}

	printf("你总共输入了%d个字符!\n", count);

	return 0;
}

那么这道题目就恰恰和下面相反,当你输入 12 C 的时候,它所统计的字符串就是4,原因就在于getchar() 和 scanf() 的区别了。

3:用 gets 函数来解本道题目。

#include<stdio.h>
int main(void)
{
	char enter[20] = { 0 };
	char *etter1 = enter;
	unsigned int Count = 0;//统计字符不可能是为负数的!
	printf("请输入字符串:");
	gets(enter);
	//1.输入条件以完成!
	while (*etter1 != '\0')
	{
		Count++;
		*etter1++;
	}
	printf("The total number of input strings:%d\n", Count);
	//2.统计字符串条件完成!
	return 0;
}

这是用 gets() 函数来做的一道求字符串长度的一道题目,从这里我们可以得知它
用 scanf() 函数来解本道题目的方法其实是一模一样。但是它gets和scanf的使用当中是有区别的。这个要注意下!

4:strlen()

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

int main()
{
	char str[50] = {0};
	int len = 0;
	scanf("%s", &str);

	len = strlen(str);
	printf("|%s| 的长度是 |%d|\n", str, len);

	return(0);
}

输入:1234 ,|1234|的长度是 |4|
还是介绍下strlen()如何求字符串长度。熟悉一下。

最后

今天第十题已经结束了,这道题目相较于前面九题难度提升了点,提升的是在于它的破解方法,但是其实也是在于本质的方法实际上都是一样的😄