1.字符串操作系统的实现:strlen

目录

前言

一、题目

二、分析

三、代码

1.字符串输入输出部分:

2.字符串长度的统计:

3.有效字符的识别:

四、问题

五、致谢


前言

        别学计算机。


一、题目

不包含字符串头文件,手搓代码实现字符串的输入功能并计算输入中有效字符的数量。


二、分析

我们首先要有一个字符数组str,一个统计变量count(要初始化滴思密达)

可以拆分成以下几个部分:

1.字符串的输入输出。(目的为检查自己编写的代码是否可以完整读取字符串)

2.字符串总长度的统计。

3.在字符串中遍历,遇到ASCII码表中的字符则计数变量自增。

三、代码

1.字符串输入输出部分:
#include<iostream>
using namespace std;
int main()
{
	int count = 0;
	char str[30];
	cin >> str;
	cout << str;
	cout <<str[i]<<" ";
}
2.字符串长度的统计:
#include<iostream>
using namespace std;
int main()
{
	int count = 0;
	char str[30];
	cin >> str;
	cout << str;
	for (int i = 0; ; i++)
	{
		if (str[i]!='\0')//如果不是字符串的结束,那么就继续遍历
			count++;
		else //否则跳出循环
			break;
	}
	cout << " " << count;
}
3.有效字符的识别:

  这个部分我们要判断我们所输入的字符是否是由键盘直接输入的,如果是那么统计变量就自增,否则不变。我们这里的思路就是通过ASCII码表来判断是否为有效字符。表中我们可以看到,键盘上能输入的字符的编码为32-126,因此我们想到将字符编码>=32&&<=126作为判断条件。

ASCII码表

代码实现如下:

#include<iostream>
using namespace std;
int main()
{
	int count = 0;
	char str[30];
	cin >> str;
	cout << str;
	for (int i = 0;; i++)
	{
		if (str[i]>=32&&str[i]<=126)//判断该字符是否属于ASCII码表
			count++;
		else if(str[i]=='\0')
			break;
	}
	cout << " " << count;
}

四、问题

       至此,我们大部分的问题就基本解决了(撒花)!但是,多次运行之后,我还发现这串代码有那么亿点点小问题就是:cin无法实现空格的输入;但是我们要的是字符串啊!回车才是一个字符串输入的结束啊。于是,我找到了C语言中的gets函数可以输入空格,但是遇到回车会终止输入,这个函数在VS里面是gets_s。所以我进行了进一步的优化。代码修改如下:

注:gets_s函数在头文件<stdio.h>中,调用之前别忘了引用一下~

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
	int count = 0;
	char str[30];
	gets_s(str);
	for (int i = 0;; i++)
	{
		if (str[i]>=32&&str[i]<=126)
			count++;
		else if(str[i]=='\0')
			break;
	}
	cout << "该字符串有效字符长度为" << count;
}

调试结果:

样例分析:

样例1特点为纯数字

样例2特点为字母数字混合字符串

样例3特点为含有空格的字符串

样例4特点为含有汉字,汉字我们认为其不是有效字符,故字符串长度为5

样例5特点为数字与符号相结合,我们认为符号属于有效字符,故字符串长度为5

五、致谢

        特别鸣谢:华南师范大学计算机学院网络工程专业C++程序设计与实验课名师宋桂琴,孕育了这篇文章,特此感谢。

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜜汁博哥

我是大学生,给钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值