C++初学(17)

news2024/9/25 15:22:30

17.1、字符函数库cctype

C++有一个与字符相关的、非常方便的函数软件包,它可以简化如确定字符是否为大写字母、数字或标点符号等工作。这些函数的原型是在头文件cctype中定义的。如果ch是一个字母,则isalpha(ch)函数返回一个非零值,否则返回0。

使用这些函数要比使用AND或者OR运算符更方便,例如:

if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

这句话等价于这句:

if(isalpha(ch))

是不是更通用,更方便。

下面这个程序演示一些ctype库函数。isalpha()来检查字符是否为字母字符;isdigit()来测试字符是否为数字字符;isspace()来测试字符是否为空白,如换行符、空格;ispunct()来测试字符是否为标点符号,顺便复习一下if else结构:

#include <iostream>
#include<cctype>
int main()
{
	using namespace std;
	cout << "Enter text for analysis,and type @"
		<< "to terminate input." << endl;
	char ch;
	int whitespace = 0;
	int digits = 0;
	int chars = 0;
	int punct = 0;
	int others = 0;

	cin.get(ch);
	while (ch != '@')
	{
		if (isalpha(ch))
			chars++;
		else if (isspace(ch))
			whitespace++;
		else if (isdigit(ch))
			digits++;
		else if (ispunct(ch))
			punct++;
		else
			others++;
		cin.get(ch);
	}
	cout << chars << " letters, "
		<< whitespace << " whitespace, "
		<< digits << " digits, "
		<< punct << " punctuations,"
		<<  others << " others." << endl;
	   
	return 0;
}

下面对cctype软件包的函数进行总结:

17.2、?:运算符

C++有一个常用来代替if else语句的运算符,这个运算符被称为条件运算符(?:),它是C++中唯一一个需要3个操作数的运算符。该运算符的通用格式如下:

expression1 ? expression2 : expression3 

如果expression1为true,则整个条件表达式的值为expression2的值,否则为expression3的值。

#include<iostream>
int main()
{
	using namespace std;
	int a, b;
	cout << "Enter two integers: ";
	cin >> a >> b;
	cout << "The larger of " << a << " and " << b;
	int c = a > b ? a : b;
	cout << " is " << c << endl;
	return 0;
}

与if else相比,条件运算符更简洁(当然如果条件很复杂还用if else吧),条件运算符生成一个表达式,因此是一个值,可以将其赋给变量或将其放到一个更大的表达式中。

17.3、switch语句

如果需要从几个项目中选择一个,使用if else可能很麻烦,而switch语句能够很容易的在大型列表进行选择。下面是switch的通用格式:

switch (integer-expression)
{
    case label1 : statement(s)
    case label2 : statement(s)
    …
    defalut : statement(s)
}

C++的switch语句就像路牌,告诉计算机应执行哪行代码。执行到switch语句时,程序将跳到integer-expression的指标记的那一行,如果integer-expression的值为4,则程序将执行标签为case  4:那一行。注意,integer-expression必须是一个结果为整数值的表达式,每个标签也必须时整数常量表达式。如果integer-expression不与任何标签匹配,则程序将跳到标签为default的那一行。如果没有default标签,将跳过switch后面的语句执行。

C++的case标签仅仅是行标签,而不是选项之间的界线。也就是说,程序跳到switch中特定代码行后,将以此执行之后的所有语句,除了break语句(),都会让程序执行完一组特定语句后停止。

下面有一段超绝长的程序:

#include <iostream>
using namespace std;
void showmenu();
void report();
void comfort();
int main()
{ 
	showmenu();
	int choice;
	cin >> choice;
	while (choice != 5)
	{
		switch (choice)
		{
		case 1:cout << "\a\n";
			break;
		case 2:report();
			break;
		case 3:"The boss was in all day.";
			break;
		case 4:comfort();
			break;
		default:cout << "That's not a choice." << endl;
		}
		showmenu();
		cin >> choice;
	}
	cout << "Bye!" << endl;
	return 0;
}
void showmenu()
{
	cout << "Please enter 1,2,3,4 or 5: " << endl
		<< " 1) alarm                 2) report" << endl
		<< " 3) alibi                 4) comfort" << endl
		<< " 5) quit" << endl;
}
void report()
{
	cout << "It's been an excellent week for bussiness." << endl
		<< "Sales are up 120%.Expenses are down 35%." << endl;
}
void comfort()
{
	cout << "Your employees think you are the finest CEO" << endl
		<< "in the industry.The board of directors think " << endl
		<< "you are the finest CEO in the industry." << endl;
}

注:为了让程序正常运行,输入必须是整数,如果你输入一个字母,输入语句将会失效,导致程序陷入死循环。该程序需要break语句来确保只执行switch语句中的特定部分。

switch语句和if else语句都允许程序从选项中进行选择。相比之下,if else更通用,它能处理取值范围;但是switch无法处理浮点测试,因为它的case标签必须是整数,标签值必须是常数。当然如果是选择多个选项,switch还是优先于if else语句。

14.4、break和continue语句

break和continue语句都使程序能够跳过部分代码。break语句是直接结束整个循环,无论后面还有进行几次;而continue语句则是读到它时跳过当前批次的循环,进入下一个循环。

#include <iostream>
const int ArSize = 80;
int main()
{
	using namespace std;
	char line[ArSize];
	int spaces = 0;

	cout << "Enter a line of text:" << endl;
	cin.get(line,ArSize);
	cout << "Complete line: " << endl << line << endl;
	cout << "Line through first period: " << endl;
	for (int i = 0; line[i] != '\0'; i++)
	{
		cout << line[i];
		if (line[i] == '.')
			break;
		if (line[i] != ' ')
			continue;
		spaces++;	
	}
	cout << endl << spaces << " spaces" << endl;
	cout << "Done!" << endl;
	return 0;
}

虽然continue语句导致该程序跳过循环体的剩余部分,但不会跳过循环体的更新表达式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于zotero无法识别拖入的pdf和caj的题录信息

一、首先要安装好茉莉花插件 1、点击链接&#xff0c;进入Zotero 插件商店&#xff0c; Zotero 插件商店 | Zotero 中文社区 (zotero-chinese.com) 搜索&#xff1a;Jasminum&#xff0c;选择好版本&#xff0c;点击下载 2、 下载好后&#xff0c;点击“工具”&#xff0c;…

兔子序列(c语言)

1.//描述 //兔子发现了一个数字序列&#xff0c;于是开始研究这个序列。兔子觉得一个序列应该需要有一个命名&#xff0c; // 命名应该要与这个序列有关。由于兔子十分讨厌完全平方数&#xff0c; // 所以兔子开创了一个新的命名方式&#xff1a;这个序列中最大的不是完全平方数…

kubectl陈述式资源管理

目录 概念 kubectl的基础命令 *每天常用的查看集群的基本信息 deployment的部署方式 deployment 的特点 基于deployment创建pod 手动缩容 service的类型以及工作原理 创建service service的类型 修改service的类型为nodeport **nodeport实验&#xff1a;对外暴露端…

数据结构(Java)实现:栈和队列

文章目录 1. 栈的模拟实现1.1 普通栈的模拟实现1.2 泛型栈的模拟实现 2. 栈的介绍3. 栈的使用4. 栈的应用场景4.1 改变元素的序列4.2 将递归转换为循环4.3 使用栈解题 5. 栈的链表实现6. 队列概念7. 队列的使用8. 模拟队列的实现8.1 链式队列8.2 顺序队列 9. 双端队列 1. 栈的模…

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图 1、本节实现的内容 上一节我们讨论了纹理贴图的相关基础操作,但上一节的纹理贴图操作基本上都是规则图形,包括圆形和球形虽然复杂一点,但是它也是规则的。这一节课我们要讨论一下,怎么在不规则图形上纹理贴图…

​polarctf靶场[web]upload1​

[web]upload1 考点&#xff1a;文件上传漏洞 不信邪&#xff0c;先上传php&#xff0c;发现被拦截 在上传jpg和png图片&#xff0c;发现也被拦截 所以先拦截抓包&#xff0c;上传个有一句话木马的png图片 将文件后缀改为php&#xff0c;先在重发器发送&#xff0c;发现上传成…

MATLAB 计算凹凸多边形的面积(85)

MATLAB 计算凹凸多边形的面积(84) 一、算法介绍二、算法实现1.代码一、算法介绍 计算凹凸多边形的面积,并输出计算结果,可视化 二、算法实现 1.代码 % 设置多边形的顶点坐标 % 这里以一个五边形为例 x = [1, 3, 4

深入理解DPO(Direct Preference Optimization)算法

目录 1. 什么是DPO&#xff1f;2. Bradley-Terry模型2.1 奖励模型的训练 3. 从PPO到DPO4. DPO的简单实现5. 梯度分析Ref 1. 什么是DPO&#xff1f; 直接偏好优化&#xff08;Direct Preference Optimization, DPO&#xff09;是一种不需要强化学习的对齐算法。由于去除了复杂的…

数分基础(03-2)客户特征分析-简单可视化

文章目录 简单可视化1. 并排柱状图2. 堆叠柱状图2.1 画图2.2 对数刻度 简单可视化 接上一篇 数分基础&#xff08;03-1&#xff09;客户特征分析&#xff0c;运行本篇代码之前&#xff0c;先运行上一篇的代码。 为了能够对比和总览三个客户群体Cluster 0 - Cluster 1 的特征&…

冯·诺依曼计算机:现代计算机的“DNA”

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

XSS LABS - Level 16 过关思路

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 进入靶场&#xff0c;右击页面&#xff0c;查看网页源码&#xff0c;搜索关键词 test 查看页面回显点&#xff1a; 页面只有一个回显点&#xff0c;跟前面关卡不同&am…

Python实时聊天室架构与API实战应用

尊敬的各位读者&#xff0c;欢迎参与本次共享研讨项目——利用Python构建实时聊天室。在本项目中&#xff0c;我们将引进一款前沿工具——发布订阅频道API&#xff0c;以实现聊天室内的实时交互功能。 在当今信息泛滥的社会环境下&#xff0c;实时交流已成为人们日常生活中不可…

探秘半枝莲:花语寓意深解、传奇传说追溯与卓越功效展现

在大自然的神秘宝藏中&#xff0c;有一种看似平凡却蕴含着无尽魅力的植物——半枝莲。它那娇小而鲜艳的花朵&#xff0c;仿佛是大自然精心雕琢的艺术品&#xff0c;散发着独特的魅力。当我们深入探寻半枝莲的世界时&#xff0c;会惊喜地发现它不仅有着迷人的花语寓意和传奇的传…

ES 根据条件删除文档

随着业务量的增多&#xff0c;es中数据越来越多&#xff0c;但有些数据其实后期并无业务用途&#xff0c;可直接做物理删除&#xff0c;程序里做兼容&#xff0c;但历史每个月的索引里的数据需要处理这部分冗余数据。 es提供_delete_by_query 根据查询条件进行删除的操作&…

ZooKeeper 实战(六) - 分布式ID实现方案

ZooKeeper 实战(六) - 生成分布式ID 文章目录 ZooKeeper 实战(六) - 生成分布式ID1.何为分布式ID2.分布式ID方案3.创建ZooKeeper节点4.获取序列ID5.处理序列ID6.使用分布式ID7.完整代码8.功能优化8.1.问题思考&#xff1f;1.容量问题2.并发问题3.内存问题 8.2.解决并发问题8.3.…

[Algorithm][综合训练][合唱团][跳台阶扩展问题][矩阵最长递增路径]详细讲解

目录 1.合唱团1.题目链接2.算法原理详解 && 代码实现 2.跳台阶扩展问题1.题目链接2.算法原理详解 && 代码实现 3.矩阵最长递增路径1.题目链接2.算法原理详解 && 代码实现 1.合唱团 1.题目链接 合唱团 2.算法原理详解 && 代码实现 解法&#…

爆火的《黑神话:悟空》对LabVIEW软件开发的启示

近期&#xff0c;《黑神话&#xff1a;悟空》在全球范围内爆火&#xff0c;引发了游戏行业和玩家群体的广泛关注。作为一款由中国开发团队Game Science历时多年打造的动作角色扮演游戏&#xff0c;它的成功不仅源于卓越的技术创新和对中国传统文化的深度挖掘&#xff0c;更在于…

本地部署Xinference实现智能体推理工作流(一)

提示&#xff1a;没有安装Docker的需要先提前安装好Docker 第一篇章 使用AutoDL平台快速部署xinference 备注&#xff1a;若使用AutoDL平台&#xff0c;以下过程使用无卡模型开机即可(省钱) 1. 下载Dify源码 Github下载Dify:https://github.com/langgenius/dify 2. 快速启动…

HTML粒子爱心

目录 写在前面 完整代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现粒子爱心动画的效果。 HTML&#xff0c;全称为HyperText Markup Language&#xff0c;即超文本标记语言&#xff0c;是构建网页的基本markup语言&#xff0c;它通过一系列标签tags来定义…

CMake Error at CMakeLists.txt (find_package)幕后真凶

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 个人主页&#xff1a; rainInSunny | 个人专栏&#xff1a; C那些事儿、 Learn OpenGL In Qt 文章目录 写在前面find_package报错解决Module模式Config模式 find_package()用法Module模式Config模式 写在前面 本文从CMake中find_packag…