c语言学习之基础知识点介绍(十一):字符串的介绍、使用
本节主要介绍c语言中的字符串的应用。
一:字符串介绍
因为c语言中没有像Java、C#那样的字符串类型,所以无法直接用字符串。需要借助数组来解决这个问题。
/*
定义:把多个字符连在一起就叫字符串。但是在c语言中要正确描述字符串,需要说成以'\0'结尾的字符集合。 用数组解决字符串问题:
1、长度需要 +1。
2、在末尾加一个'\0'
然后用%s输出。
例如:
char chs[4] = {'a','b','b','\0'};
printf("%s \n",chs); 语法:
1、char 变量名[实际长度+1] = {'a','b','b','\0'};
char str[4] = {'a','b','b','\0'};
2、char 变量名[] = {'a','b','b','\0'};
char str[] = {'a','b','b','\0'};
3、char 变量名[实际长度+1] = "字符串";
char str[4] = ”abc”;//记得不用加\0
4、char 变量名[] = "字符串";
char str[] = ”abc”;//记得不用加\0
因为char只有一个字节,中文有3个字节,所以在保存中文的时候需要这样:
char str[] = "哈哈哈哈哈": */
二、字符串的输入和输出
/*
输出:用 %s。
输入也是用 %s。
注意:
1、数组名是一个地址常量,如果用scanf进行输入,只需要写数组名,不需要写&。
2、如果要输入,数组的长度一定要足够长,不然可能会出现未知错误(越界造成的)。 例如:
char str[] ;
scanf(" %s ",str):
printf("str = %s \n",str);
*/
三、字符串的判断
/*
字符串的比较:
例如:
char str1[] = "abc";
char str2[] = "abc";
if(str1==str2){
printf("相等");
}else{
printf("不等");
}
//永远输出: 不等
所以,不能用 == 来判断两个字符串是否相等,因为数组名是一个地址常量。 正确的方法:
1、需要导入#include <string.h>头文件
2.、使用strcmp
注意:使用strcmp,如果返回0,代表两个字符串相等。
例如:
char str1[] = "abc";
char str2[] = "abc";
int result = strcmp(str1,str2); //结果是0,
// if(result == 0){ //两种都可
if(!strcmp(str1,str2)){
printf("相等");
}else{
printf("不等");
} */
四、字符串的其他表示法
/*
1、数组表示法:
char str[] = "abc";
2、常量:
"abc";
3、指针表示法:
char *str = "abc"; 数组表示法和指针表示法的区别:
1、数组表示法可以改变里面的值,指针表示法不可以改值。
2、数组表示法可以接受用户输入的值,指针表示法不可以接收。
3、数组表示法不可以用==来判断一个字符串和一个字符串常量是否相等,指针表示法可以用==,但是不推荐这样做,推荐用strcmp。
例如:
char *str = "abc";
if(str == "abc"){ }
*/
五、c语言中字符串常用的函数
/*
输出:
1、printf("%s \n",字符串变量);
2、puts(字符串变量);
区别:1、puts不需要格式化控制符,printf需要。
2、puts只能输出字符串,printf其他类型都可以输出。
3、puts自带换行,printf没有自带换行。 输入:
1、scanf(" %s ",字符串变量);
2、gets(字符串变量);
区别:1、gets只能输入字符串,scanf其他类型都可以输入。
2、gets不需要格式化控制符,printf需要。
puts和gets都在strdio.h中 ,需要导入(#include <strdio.h>)。 其他函数:(都在string.h头文件中,导入#include <string.h>)
1、strcmp
语法:strcmp(字符串1,字符串2);比较两个字符串谁大谁小(比较的是ASCII码)。如果第一个字符串比第二个字符串大,返回一个正整数;反之,返回一个负整数。如果第一个字母不等,就直接返回结果,第一个相等,就继续比较第二个字母,如果不等,就直接返回结果,以此类推。
例如:
char str1[] = "abc";
char str2[] = "zbc";
printf("%d \n",strcmp(str1,str2)); //输出:-25,不等,只有输出0的时候才是相等。 2、strcpy
语法:strcpy(字符串数组,字符串2); 是把字符串2的内容拷贝到字符串数组中;如果原先的字符串数组中有值,会被覆盖。
char str1[] = "abc";
char str2[] = "哈哈哈";
printf("%s \n",strcpy(str1,str2)); //输出:哈哈哈 3、strcat
语法:strcat(字符串数组,字符串2); 是把字符串2的内容追加到字符串数组后面。
char str1[] = "abc";
char str2[] = "哈哈哈";
printf("%s \n",strcat(str1,str2)); //输出:abc哈哈哈 4、strlen
语法:strlen(字符串);计算字符串的实际长度(占用的字节数),\0不参与计算。 介绍两种不常用的函数:
putchar:输出字符,不带换行
例如:putchar('a'); getchar:输入字符,改函数是有返回值的,返回值就是你输入的字符。
例如:
printf("请输入一个字符:\n");
char chs = getchar();//输入a
printf("chs = %c",chs);//输出:chs=a */
六、一些注意事项
/*
'0' != 0;因为字符 0 对应的ascii码是48,0对应的ascii码是‘\0’。
0 == '\0' 指针表示法:
char *str = "abc";//指针自己不存字符串,而是指向常量区的某个字符串地址。
数组表示法:
char str[]="abc"; 区别:
指针表示法不能接收用户的输入,不能被修改,而数组表示法都可以。 在连接字符串的时候,需要注意:
strcat(字符串1,字符串2);
字符串1需要足够长的长度来保存拼接后的字符串。
*/
c语言学习之基础知识点介绍(十一):字符串的介绍、使用的更多相关文章
- c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
- c语言学习之基础知识点介绍(七):循环结构
本节主要介绍循环结构 一.while循环 /* 语法: while(表达式){ //循环体; } 注意:循环变量.循环条件和循环控制语句三者缺一不可. 例如: */ ; //循环变量 ){ //循环条 ...
- c语言学习之基础知识点介绍(四):算术运算符和逗号表达式
本节主要介绍c语言中运算符. 运算符主要分为四类: 1.算术运算符 加(+),减(-),乘(*),除(/),取余(%,两数相除,得到余数) 2.关系运算符 3.逻辑运算符 4.换位运算符 下面将依次介 ...
- c语言学习之基础知识点介绍(一):输出语句和变量简单介绍
本系列是为了学习ios做准备的,也能作为c语言入门的教程看看. c语言的程序结构: 1.顺序结构:自上而下依次执行. 2.分支结构:程序有选择的执行某段代码或者不执行某段代码. 3.循环结构:程序循环 ...
- oc语言学习之基础知识点介绍(五):OC进阶
一.点语法介绍 /* 以前封装后,要给属性赋值,必须调用方法 这样做,有两个缺点: 1.代码量多,调用方法要写的东西多. 2.看起来并不像是给属性赋值,也不像取值. 我们用点语法就可以更好的解决! 点 ...
- oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍
一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类 ...
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...
- c语言学习之基础知识点介绍(十四):指针的进阶
一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...
随机推荐
- WinForm打印之页边距
1.启用页边距: 默认情况下PrintDocument是不理会页边距的(MS再次让人无语...),这也是为什么有人说明明设了页边距在打印预览里却没有效果的原因. 解决办法是设置PrintDocumen ...
- PS CS5如何在一张图片里插入另一张图片?
帮你介绍两种比较简便的方法:1.ctrl+A全选,ctrl+C复制,在另一个图中ctrl+V粘贴即可:2.PS中的窗口可以拖动的,拉动一个窗口,选择移动工具,直接移到另一张图上即可!
- 【转】git使用教程
Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ...
- SQL Server查询性能优化——堆表、碎片与索引(一)
SQL Server在堆表中查询数据时,是不知道到底有多少数据行符合你所指定的查找条件,它将根据指定的查询条件把数据表的全部数据都查找 一遍.如果有可采用的索引,SQL Server只需要在索引层级查 ...
- xcodebuild导出ipa方法
xcode 5.x版本导出ipa是不需要开发者账号,而xcode6以后导出ipa必须要求选择开发者team,无法绕开,但我们使用xcodebuild命令行可以无视这个限制 环境: mac osx 10 ...
- 音频播放(iOS开发)
音频处理 一.录音 录音应用场景 语音聊天 即时通讯软件中,都包含语音发送功能 语音备忘录 录一段音频,来记录某件事情 录音功能实现 导入AVFoundation框架 作用:一些多媒体的处理,基本上都 ...
- android httpClient 支持HTTPS的2种处理方式
摘自: http://www.kankanews.com/ICkengine/archives/9634.shtml 项目中Android https或http请求地址重定向为HTTPS的地址,相信很 ...
- 在Android中访问内置SE和基于SE的卡模拟(一)
2013-10-10 编写 前言 在“十问Android NFC手机上的卡模拟”文中仅仅简单的介绍了一下相关的概念,如果需要了解基于SE的卡模拟的更多细节,也就是,究竟在Android的NFC手机上, ...
- 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3
本模板尤其适用于家电数码行业. 本模板已经开发.测试完毕,并开放演示. 本模板支持全站静态.销售数量后台自定义.首页商品独立图片.品牌独立展示.商品精美团购.宽屏窄屏自动识别并切换.分 ...
- shell 中函数放回字符串问题
shell 中函数放回字符串问题 shell 中不可以直接 return 字符串 ,可以return 数字.如果要return 字符串 改为 echo "hello world" ...