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()如何求字符串长度。熟悉一下。
最后
今天第十题已经结束了,这道题目相较于前面九题难度提升了点,提升的是在于它的破解方法,但是其实也是在于本质的方法实际上都是一样的😄