本文共 2241 字,大约阅读时间需要 7 分钟。
1.纯c中字符串的机制以及对其的处理
C语言中对字符串常量是按字符数组处理的,c语言中没有字符串变量,只有字符变量
(1)字符串的表现形式
字符数组的定义:
char c[10];
c[0]='i';
初始化:
char c[10]={0};
char c[10]={'I',' ','a','m'};//不足的用'\0'补全
char c[]="I am happy"; //自动在后面加上了一个'\0'; ***与char c={'I',' ','a','m',' ','h','a','p','p','y','\0'}等价
通过指针引用字符串
char * string="I love China!"; 等价于:char * string ; string="I love China!";
(2)对字符的处理
#include<ctype.h>
isalnum(c) 如果c是字母或数字,返回 true
isalpha(c) 如果c是字母,返回true alphabet['ælfəbet] 字母
iscntrl(c) c是控制符,返回true
isdigit(c) 检查参数c是否是阿拉伯数字0到9,若是则返回true,否则返回false
isgraph(c) 如果c不是空格,则可打印,,则为true
islower(c) 如果c是小写字母,则为true
isupper(c) 如果c是大写字符,则为true
isprint(c) 如果c是可打印的字符,则为true
ispunct(c) 如果c是标点符号,则为true
isspace(c) 如果c是空白字符,则为true
isxdigit(c) 如果c是十六进制数,则为true
tolower(c) 如果c是大写字符,则返回其小写字母,否则直接返回c
toupper(c) 跟tolower相反
(3)对字符串的处理
#include<string.h>
extern char *strcat(char *dest,char *src);
#include <string.h>
在C++中,则存在于<cstring>头文件中。
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的。
strcpy()
strcmp()
strlen()
strlwr()
strlupr()
等等
2.c++中字符串的处理
对于c的兼容#include<cctype>,#include<cstring>
c++语言定义了一个内容丰富的抽象数据类型库,其中string是一种重要的标准库类型,支持可变长字符串,是对内置数组的某种抽象
#include<string>
using std::string;
(1)定义和初始化string对象
string s1; //默认初始化,s1是一个空字符串
string s2=s1; //s2是s1的副本
string s3=“woaini"; //s3是该字符串字面值的副本
string s4(10,'c'); //s4的内容"cccccccccc"
string s2(s1);
string s("woaini");
(2)常用的string对象上的操作
=,==,!=,<,<=,>,>=,empty(),size(),append(),.......
string s="sunxiao"+"wu";//此语句错误,不能把两个字面值直接相加,c++语言中的字符串字面值不是标准库类型string的对象
(3)string::size_type类型
大多数标准库类型都定义了几种配套类型。这些配套类型体现了与机器无关的特性,它是一个无符号类型的值,能足够存放下任何string对象的大小。size()的返回值
(故如果一条表达式中已经有了size()函数就不要再使用int,避免问题)
(4)#include<cctype>
他他 他
3.boost库中对字符串的处理
boost c++字符串算法库Boost.StringAlgorithms提供了许多字符串操作
字符串的类型可以是std::string,std::wstring,std::basic_string的实例
头文件
#include<boost/algorithm/string.hpp包含了其他的所有头文件
boost::algorithm::to_upper_copy()
boost::algorithm::to_lower_copy()
boost::algorithm::to_upper()
boost::algorithm::to_lower()
boost::algorithm::split()
split的用法:
vector<string> vec;
string str="sunxiaowu,sunxiaoliu,sunxiaoqi,sunxiaoba";
boost::algorithm::split(vec,str,is_any_of(","));//则被切分的结果保存到vec对象中
boost::algorithm命名空间中还有许多对stirng类型对象的处理,十分强大好用,重复造轮子实在是没有多大意思
转载地址:http://rcumi.baihongyu.com/