c语言 字符串switch,C++中如何对字符串进行switch-程序员宅基地

技术标签: c语言 字符串switch  

C++中如何对字符串进行switch判断?

C++的开关语句,形式为

switch(expr1)

{

case no1:

break;

case no2:

break;

...

case noN:

break;

default:

break;

}

其功能是对expr1的值做判断,并执行与其相等的case分支,并一直执行到break或switch语句结束。

这里,no1, no2... noN必须是整型常量,而expr1也必须是一个类型为整型的表达式。

所以,直接对string类型做switch判断是非法的。但是可以根据实际情况,将运算结果转换为整型,从而使用switch语句。

举例来说,如果已知string类型的对象s,长度为5,其内容为"testN"形式,其中N可能为任意字符。这时要对该对象判断,就可以采用switch语句了。

switch(s[4])

{

case '0':

break;

case 'A':

break;

...

}c语言中switch怎么可以用字符串作条件表达式?

首先: switch 语句及case 的类型 表达式必须是整数、字符或枚举量值。

超级好奇地编译了一下:

1>e:\project\stl_proc\stl_proc\stl_proc\stl_proc.cpp(86) : error C2052: “double”: 非法的 case 表达式类型

真是颠覆了我的三观。。。。 switch('0.4') 竟然没报错。。 我把下面的修复了之后, 让我们看看程序怎么处理

改成:

switch('0.4')

{

case '0': a=0;break;

case'.': a=9;break;

default:a=7;

}printf("%d",a);

运行了一下, 都走到default 分支了 。

改成:

switch('0')

{

case '0': a=0;break;

case'.': a=9;break;

default:a=7;

}printf("%d",a);

全部走到 case 0 分支了。

结论: switch 后面可以不是一个变量。C语言的switch case 语句的case 常量 能匹配字符串常量吗?

C语言的switch case 语句的case不能匹配字符串常量,只能匹配整型类常量,如int short long char.

switch用法格式:

switch ( 表达式)

{

case 常量表达式1:

语句1;

[break;] 中括号,表示此语句可以没有

case 常量表达式2:

语句2;

[break;]

……

case 常量表达式n:

语句n;

[break;]

[default:]

语句n+1;

[break;]

}

说明:

break 表示退出{ }

case后面只能跟一个值(加冒号:),而不能是一个表达式

switch(表达式) 后面没有分号(;)

{}前后没有分号(;)

default语句可以出现在任何位置,但建议写到最后,表示除去case匹配之外的其它情况。也可以没有default语句c语言中case后可以跟字符么,如case +:printf("...")

case后可以跟字符,但必须是常量字符,常量字符就是用单引号引起来的字符,如:'a' , '+','.'等

char ch;

ch=getchar();

switch( ch )

{

case ’+‘:printf("...")c语言中如何判断两个字符串相等

可以使用库函数strcmp比较。

strcmp是C语言比较字符串的库函数。形式为

int strcmp(char *a, char *b);

该函数会对a和b的每个字符,按照ascii码值比较,如果二者完全相同返回0;如果a的ascii码值先出现较大者,会返回1;否则返回-1.

所以,要判断字符串相等,可以使用

if(strcmp(string1, string2) == 0)

如果返回为0,则相等,否则不等。C语言中判断两个字符串是否相同的方法

C语言提供了几个标准库函数,可以比较两个字符串是否相同。以下是用strcmp()函数比较字符串的一个例子:

#include

#include

void main (void);

void main(void)

{

char* str_1 = "abc" ; char * str_2 = "abc" ; char* str_3 = "ABC" ;

if (strcmp(str_1, str_2) == 0)

printf("str_1 is equal to str_2. \n");

else

printf("str_1 is not equal to str_2. \n");

if (strcmp(str_1, str_3) == 0)

printf("str_1 is equal to str_3.\n");

else

printf("str_1 is not equalto str_3.\n");

}

上例的打印输出如下所示:

str_1 is equal to str_2.

str_1 is not equal to str_3.

strcmp()函数有两个参数,即要比较的两个字符串。strcmp()函数对两个字符串进行大小写敏感的(case-sensitiVe)和字典式的(lexicographic)比较,并返回下列值之一:

----------------------------------------------------

返 回 值 意 义

----------------------------------------------------

<0 第一个字符串小于第二个字符串

0 两个字符串相等 ·

>0 第一个字符串大于第二个字符串

----------------------------------------------------

在上例中,当比较str_1(即“abc”)和str_2(即“abc”)时,strcmp()函数的返回值为0。然而,当比较str_1(即"abc")和str_3(即"ABC")时,strcmp()函数返回一个大于0的值,因为按ASCII顺序字符串“ABC”小于“abc”。

strcmp()函数有许多变体,它们的基本功能是相同的,都是比较两个字符串,但其它地方稍有差别。下表列出了C语言提供的与strcmp()函数类似的一些函数:

-----------------------------------------------------------------

函 数 名 作 用

-----------------------------------------------------------------

strcmp() 对两个字符串进行大小写敏感的比较

strcmpi() 对两个字符串进行大小写不敏感的比较

stricmp() 同strcmpi()

strncmp() 对两个字符串的一部分进行大小写敏感的比较

strnicmp() 对两个字符串的一部分进行大小写不敏感的比较

-----------------------------------------------------------------

在前面的例子中,如果用strcmpi()函数代替strcmp()函数,则程序将认为字符串“ABC”等于“abc”。C语言的switch语句中的条件都可以是什么类型?

Switch用在编程中,如C语言中它经常跟Case一起使用,是一个判断选择代码。其功能就是控制业务流程流转的。

switch语句,即“切换”语句;case即“情况”。

switch语句的语法如下(switch,case和default是关键字):

switch ( controllingExpression )

{case constantExpression1 :

case constantExpression2 :

case constantExpression3 :

statements; /*当满足constantExpression1、constantExpression2、constantExpression3任何一个都执行statements */

break;

case constantExpression :

statements ;

break;

...

default :

statements ;

break;}

遵守switch语句规则

switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:

只能针对基本数据类型使用switch,这些类型包括int、char、枚举、bool等。对于其他类型,则必须使用if语句。

switch()的参数类型不能为实型 。

case标签必须是常量表达式(constantExpression),如42或者"42"。

case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。

C语言switch应用例子:

例一:

#include

int main()

{

double score;

printf("请输入分数:\n");

scanf("%lf",&score);

switch((int)(score/10))//switch((int)score/10)出现严重错误

{

case 10:

case 9:printf("A(最好)\n");break;

case 8:printf("B(优秀)\n");break;

case 7:printf("C(良好)\n");break;

case 6:printf("D(及格)\n");break;

case 5:

case 4:

case 3:

case 2:

case 1:

case 0:

printf("E(不及格)\n");break;

default:

printf("Error!\n");

}

}switch case 语句问题 表达式可以使字符串吗

不行,可以是整形,包括bit,int,long。在C++里的话用字符也可以,比如case 'c',因为字符在内存里是用一个整数来表示的,也就是传说中的ASC码c语言中switch怎么可以用字符串作条件表达式

直接使用if..else..语句判断C语言如何比较两个【字符】或者【字符串】是否相等?迷糊了,求解答

比较字符可以直接使用==比较操作符,如:

char c1='a',c2='b';

if(c1==c2) printf("%c is same as %c.",c1,c2);

else printf("%c is different to %c",c1,c2);

若是字符串,则需要使用字符串函数了,strcmp

char s1[]="abc",s2[]="xyz";

if(strcmp(s1,s2)==0) printf("%s is same as %s.",s1,s2);

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。 标签:break case switch

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42496673/article/details/117013070

智能推荐

计算机科学与技术本科人才培养目标,计算机科学与技术本科人才培养探索-程序员宅基地

文章浏览阅读199次。[摘要]信息技术发展日新月异,高校计算机专业教育重知识轻实践的人才培养观念与培养模式亟待改革。积极致力于计算机科学与技术本科专业创新应用型人才培养的探索与实践,在“厚基础、宽口径、重实践、求创新”的教育理念指导下,改革培养模式、优化课程体系、夯实教学团队、强化实践环节,打造一支教学科研能力强、结构合理的高水平师资队伍,构建较为科学的人才培养模式和课程体系,培养一批综合素质和核心竞争力强的创新应用型..._探索建立“厚基础、重实践、能创新、擅实战”的高端应用型人才培养模式

node.js和php对比之下,前端人员学那个更好?_nodejs代替php-程序员宅基地

文章浏览阅读2.8k次,点赞4次,收藏4次。浅谈nodejs和php现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaScript 编写后端代码。这最终催生了MEAN(MongoDB + Express +AngularJS + NodeJS )堆栈 web 开发框架,从前端到后端甚至是数据库(MongoDB -JSON)都使用 JavaScript。在 Node.js 之前,Web 开发通常是在 PHP_nodejs代替php

微信小程序云开发云函数总结_c# wx.cloud.init-程序员宅基地

文章浏览阅读2.6k次,点赞5次,收藏24次。1、小程序创建项目时选择云开2、创建进入小程序后选择云开在设置中创建配置环境在小程序中cloudfunctions文件下选择创建的环境并创建nodejs云函数,在每个云函数下的index.js中进行编译3、login云函数创建项目后自动生成只需要上传部署就行4、新增数据云函数// 云函数入口文件const cloud = require('wx-server-sdk')..._c# wx.cloud.init

将centos7打造成桌面系统centos-程序员宅基地

文章浏览阅读3.5k次。2019独角兽企业重金招聘Python工程师标准>>> ..._centos7 palemoon

理解PHP及Zend Engine的线程安全模型(ZTS)_php zts 哪里定义的-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏6次。在阅读PHP源码和学习PHP扩展开发的过程中,我接触到大量含有“TSRM”字眼的宏。在查找资料过程中发现有2篇文章写的不错,整理如下:深入研究PHP及Zend Engine的线程安全模型:http://blog.codinglabs.org/articles/zend-thread-safety.htmlPHP源码分析之线程安全模型:http://blog.csdn.net/h_php zts 哪里定义的

详解oracle delete和truncate的区别_delete rollba-程序员宅基地

文章浏览阅读185次。语法 delete from aa truncate table aa 区别 1.delete from后面可以写条件,truncate不可以。2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。3.delete from_delete rollba

随便推点

Captcha must be filled out解决_captcha must be filled out.-程序员宅基地

文章浏览阅读1.4w次,点赞30次,收藏36次。今天注册kaggle时发现没有显示人机验证的选项,而是Captcha must be filled out的红字。然后就去网上搜索,找了一番之后终于解决。保存之后去规则列表查看可以检查是否成功,成功的应该是有上面三条的。就是这样的,因为前面下载过了所以显示覆盖已有,之前没有下载过会显示 添加。然后关闭这个页面,在kaggle注册页面刷新就可以出现人机验证了。不过我搜索第二个没有成功,搜索第一个成功的。_captcha must be filled out.

Python3:《机器学习实战》之支持向量机(4)核函数及其实现_头歌机器学习支持向量机第四关核函数-程序员宅基地

文章浏览阅读1w次,点赞9次,收藏44次。Python3:《机器学习实战》之支持向量机(4)核函数及其实现转载请注明作者和出处:http://blog.csdn.net/u011475210代码地址:https://github.com/WordZzzz/ML/tree/master/Ch06操作系统:WINDOWS 10软件版本:python-3.6.2-amd64编  者:WordZzzz_头歌机器学习支持向量机第四关核函数

live555: The input frame data was too large for our buffer size 解决方法_multiframedrtpsink::aftergettingframe1(): the inpu-程序员宅基地

文章浏览阅读7.1k次。在做live555 直播的时候,输入的图片尺寸是320*240 的时候,live555 输出的RTSP数据流可以正常解码,运行没有出现异常现象,但是把图片尺寸改为640*480的时候,就出现了问题: MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer ..._multiframedrtpsink::aftergettingframe1(): the input frame data was too large

java RMI 技术介绍和实践_rmi请求-程序员宅基地

文章浏览阅读214次。RMI 基本思想是远程方法调用,即客户端调用某个方法,其本质是将这个方法的调用请求,发送给服务器,由服务器代为执行,且,服务器将执行结果回送客户端。对于客户端而言,RMI 只要求客户端针对方法本身,产生一种错觉:方法是在本地被调用的;对于服务器而言,RMI 相当于要处理一个来自客户端的“请求”;这个请求针对某个方法。_rmi请求

JVM对象实例化过程_jvm中对象的实例化过程-程序员宅基地

文章浏览阅读1.6k次。JVM对象的实例化从字节码文件看创建对象的过程判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。如果没有,那么在双亲委派模式下,使用当前类加载器已ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果找到,则进行类加载,并生成对应的Class类对象_jvm中对象的实例化过程

XAMPP 安装_xampp fake sendmail-程序员宅基地

文章浏览阅读687次。XAMPP是一个易于安装且包含MySQL、PHP和Perl的建站集成软件包。XAMPP中文版软件操作简单,功能强大,我们只需要在本站下载解压后就可以安装使用。XAMPP软件支持不同的版本以及语言,帮助大家快速简便的建立服务器。华军软件园为您提供xampp中文版官方下载。xampp中文版软件特色  XAMPP此版本由phpStudy作者重新编译,精简掉五分之四,安装包只有35M。..._xampp fake sendmail