【C++】字符串处理
字符串处理
标签:c++
目录
- 字符串处理
- 一、输入
- 1、 scanf()函数
- 2、 gets()函数
- 3、 getchar()函数
- 二、输出
- 1、 printf()函数
- 2、 puts()函数:
- 3、 putchar()函数
- 三、cin()和cout()
- 1、 基本格式:
- 2、 注意:
- 四、字符数组和string()对象
- 1、 字符数组
- 2、 string对象
- 五、字符串处理函数
- 一、输入
一、输入
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<
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中常用函数
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该函数是将数字字符串转换成长整型的函数。