【C++】字符串处理
字符串处理
标签:c++
一、输入
1、 scanf()
函数
格式:scanf(“%s”,arryName)
注意:录入时遇到空白字符(空格、回车、制表)即结束
2、 gets()
函数
格式:gets(char *ch)
注意:
- 读取整行内容,包括空格和制表,只在遇到回车时结束
- 只能读取字符数组,不能读string对象
3、 getchar()
函数
格式:
int ch[N];(设为char ch[N]也可以)
while((ch[i++] = getchar()) != 32 && (ch[i++] = getchar()) != '\n');
ch[i-1] = '\0';
注意:
- 函数获取的是整型,即字符的十进制ASCII码
- 每次仅读入一个字符,读取字符串时要循环读取,通过循环条件限制读取内容,并在字符串末尾添加’\0’
- 空白符ASCII码:空格:32,制表:9,换行:10
二、输出
1、 printf()
函数
格式:printf(“格式控制符”,ch)
2、 puts()
函数:
格式:puts(arryName)
3、 putchar()
函数
putchar(变量名或者表达式)
变量可以是字符型或者整型,输出结果一定为字符型
三、cin()
和cout()
1、 基本格式:
cin>>arryName
cout<<arryName
2、 注意:
cin
遇到空白字符就停止接收,如果后面还有接收语句,则余下的部分被赋值给下一个变量,如果需要接收空格,使用cin.getline(stringName, size)
函数,最多只可以读入size-1
个字符,多余的不接收- 使用
getline(cin, str)
语句时,必须用getchar()
将之前输入的\n
接收掉!!!否则第一次接收的字符串是空白的 cin()/cout()
的运行速度比scanf()/printf()
慢,尽量减少使用
四、字符数组和string()
对象
1、 字符数组
(1) 数组定义:
char stringName[N];
cin/scanf/gets
读入时末尾自动添’\0’
不能用字符数组和字符指针直接赋值,只能用字符串常量赋值
只要不发生内存溢出,可以任意访问字符数组中的内容,只是内容为乱码
(2) 字符指针定义:
char *pStr;
可以在定义时赋值,也可以在定义后使用前赋值
赋值方式为:字符串常量、字符数组、字符指针,但不能是string
对象
2、 string
对象
(1) string
对象的定义:
对象:
string valName;
如:
char szString[100] = "huiahgigh";
char *p1 = "jiahgi";
string str = "hhuihs";
string str1 = szString, str2 = p1, str3 = str;
对象数组:
string arrayName[N];
定义时可以初始化
初始化内容为:字符串常量、字符数组、字符指针、string
对象
(2) 输入输出
cin>>stringName;
char szString[N];
scanf(“%s”,szString);
stringName = szString;
char szString[N];
gets(szString);
stringName = szString;
(3) 赋值
可以用字符常量、字符串常量、字符数组、字符指针、string
对象进行赋值,不需要考虑长度
(4) string
对象的运算
支持<,<=,==,>=,>,+,+=,[]运算符,意义同相应的字符串处理函数,string
对象比较大小时按照字典顺序比较,大小写相关,大写字母小于小写字母
(5) string
中常用函数
to_string()
,stoi
,stof
五、字符串处理函数
1、包含在string.h
或者cstring
头文件中
2、 注意函数返回值!!!
strlen()
函数char* str = "12345";
int len = strlen(str);
printf("len = %d\n", len);
该函数是计算字符串长度的函数,但不包含字符串结尾的’\0’
strcat
与strncat
函数char str1[10] = {'1','2','3'};
char str2[5] = {'x','y','z','w'};
strcat(str1, str2);//把str2追加到str1的后面
strncat(str1, str2, sizeof(str1) – strlen(str1) - 1);//把str2追加到str1的后面,最后一个参数是str1剩余的长度。
printf("string = %s\n", str1);
- 这两个函数都是拼接字符串的函数。
str1
一定要有足够的空间来放str2
,不然会内存溢出。strncat
函数比strcat
函数更安全。
strcmp
与strncmp
函数char* str1 = "hello";
char* str2 = "hellojj";
int result1 = strcmp(str1, str2);//比较两个字符串
printf("result1 = %d\n", result1);
int result2 = strncmp(str1, str2, 5);//最后一个参数代表,比较两个字符串的前n个
printf("result2 = %d\n", result2);
strcmp
函数,如果两个字符串相同,则返回0,否则为非0strncmp
函数,最后一个参数代表比较的前n
个字符,如果两个数前n
个相同则返回0,否则为非0(大于为正,小于为负)
strcpy
与strncpy
函数char strBuf[20] = {0};
char* str = "hello devbird";
strcpy(strBuf, str);//将str中的字符串拷贝到strBuf中
printf("strBuf = %s\n", strBuf);
strncpy(strBuf, str, 8);//将str中的前8个字符拷贝到strBuf中
printf("strBuf = %s\n", strBuf);
- 两个函数都是拷贝字符串函数,有缓冲区溢出危险。
strncpy
最后一个参数代表要拷贝的字符数。
sprintf
函数char buf[50];
sprintf(buf, "我有%d块钱!", 100);
printf("buf = %s\n", buf);//输出结果:buf = 我有100块钱!
printf
是向屏幕输出一个字符串。sprintf
是向char
数组输出一个字符串,其他行为和printf
一模一样。sprintf
也存在缓冲区溢出的问题。
strchr
函数char* str = "devbird";
char* result = strchr(str, 'b');
printf("result = %s\n", result);//结果:result = bird
char* res = strchr(str, 'z');
printf("res = %s\n", res);//结果:res = (null)
该函数是查找字符的函数,如果能找到则返回当前字符及其后面的字符,否则返回为null
strstr
函数char* str = "I am a Android developer!";
char* subStr = "Android";
char* result = strstr(str, subStr);
printf("result = %s\n", result);//结果:result = Android developer!
该函数是查找子字符串,返回值为子字符串第一次出现的位置及其后面的字符串,如果没查找到则返回为
NULL
strtok
函数char str[] = "2016/08/29 20:06:55";
char* result = strtok(str, "/");
while (result)
{
printf("result = %s\n", result);//结果:result = 2016
// result = 08
// result = 29 20:06:55
result = strtok(NULL, "/");
}
字符在第一次调用时
strtok()
必需给予参数str
字符串,往后的调用则将参数str
设置成NULL
,每次调用成功则返回指向被分割出片段的指针。atoi
函数char* str = "123";
int i = atoi(str);
printf("i = %d\n", i);//输出:i = 123
该函数是一个将数字字符串转换成int类型的函数。
atof
函数char* str = "29.3547";
float f = atof(str);
printf("f = %f\n", f);//输出:f = 29.354700
该函数是将一个数字字符串转换成float类型的函数。
atol
函数char* str = "31465666";
long l = atof(str);
printf("ld = %ld\n", l);//输出:ld = 31465666
该函数是将数字字符串转换成长整型的函数。
【C++】字符串处理的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Redis的简单动态字符串实现
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- Javascript正则对象方法与字符串正则方法总结
正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- LuoguP2382 化学分子式 题解
Description 你的任务是编写一个能处理在虚拟的化学里分子式的程序,具体地说,给定你所有原子的相对原子质量,求出所有询问的分子的相对分子质量,或者报告不存在. 数据范围:原子质量 \(\leq ...
- LuoguB2030 计算线段长度 题解
Content 已知线段的两个端点的坐标 \(A(X_a,Y_a),B(X_b,Y_b)\) ,求线段 \(AB\) 的长度. 数据范围:\(|X_a|,|Y_a|,|X_b|,|Y_b|\leqsl ...
- LuoguP7072 [CSP-J2020] 直播获奖 题解
Update \(\texttt{2020.11.13}\) 修改了一个小细节. \(\texttt{2020.11.16}\) 修改了一个错误. Content 有一场 \(n\) 个人的比赛,计划 ...
- Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnl
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read ...
- uniapp+nvue开发之仿微信语音+视频通话功能 :实现一对一语音视频在线通话
本篇文章是利用uni-app和nvue实现微信效果功能的第三篇了,今天我们基于uniapp + nvue实现的uniapp仿微信音视频通话插件实例项目,实现了以下功能: 1: 语音通话 2: 视频 ...
- python 安装模块报错 response.py", line 302, in _error_catcher
python 安装模块报错 Exception:Traceback (most recent call last): File "/usr/share/python-wheels/urlli ...
- SpringBoot整合websocket简单示例
依赖 <!-- springboot整合websocket --> <dependency> <groupId>org.springframework.boot&l ...
- JAVA类初始化和实例初始化
一.类初始化过程 1.一个类要创建实例需要先创建和加载 (1) main方法所在的类需要先加载和实例化 2.一个子类要初始化,需要先初始化父类 3.一个类初始化就是执行<clinit>方法 ...
- 惊!世界上竟然有O(N)时间复杂度的排序算法!计数排序!
啥?你以为排序算法的时间复杂度最快也只能O(N*log(N))了? O(N)时间复杂度的排序算法听说过没有?计数排序!!它是世界上最快最简单的算法!!! 计数排序算法操作起来只有三步,看完秒懂! 根据 ...
- 【LeetCode】237. Delete Node in a Linked List 解题报告 (Java&Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 设置当前节点的值为下一个 日期 [LeetCode] ...