C/C++ 字符串操作总结(更新ing)

一.字符数组类型的字符串与字符串类型的字符串

在 C++ 中我们可以使用 字符数组 来代替字符串,但字符串与字符数组不是完全等价的。

C++字符串与字符数组区别

  • 在 C++ 中,字符串必须是以 \0 做为结尾的,但字符数组没有这个要求。

  • 字符串一定是一个 char 类型的数组,但 char 的数组未必是字符串。

  • 数字 0(和字符 ‘\0’ 等价)结尾的 char 数组 就是一个字符串,但如果 char 数组没有以数字 0 结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的 char 数组。

C++字符串与字符数组对比详解

指定长度

char arr[5] = {'H', 'e', 'l', 'l', 'o'};

这里,我们指定了数组的长度,但数组的长度正好跟后面初始化的元素个数相等,因此,此时不会自动在最后增加 \0 结尾,因此,这里的 arr 变量 是一个字符数组,而不是字符串,现在,我们修改如下:

char arr[6] = {'H', 'e', 'l', 'l', 'o'};

此时,我们定义的 arr 变量的长度比后面初始化字符的个数多了一个,此时,会自动在最后增加了 \0,此时的 arr 是一个字符串。

不指定数组长度

char arr[] = {'H', 'e', 'l', 'l', 'o'};

这里,我们没有指定数组的长度,且没有以 \0 结尾,因此,这里的 arr 变量是一个字符数组,而不是字符串,现在,我们修改如下:

char arr[] = {'H', 'e', 'l', 'l', 'o',‘\0’};

我们在最后增加了 \0,此时的 arr 是一个字符串。

字符串遇0自动结束

char arr[] = "Hello\0world";

如果我们以字符串输出变量 arr,那么只会输出 “Hello”,因此,以字符串输出遇到 \0 会自动结束,如果使用字符数组输出,则会全部输出。

二.字符数组类型字符串的基本操作

1.定义

指定长度

char str[6]="hello";

不指定长度

char str[]="hello world";//或者char str[]="hello world\0";
char str[]="'h','e','l','l','o','\0'";

2.赋值

cin和scanf以空格/回车为分隔符:

    char str[20];
    scanf("%s",str);
    cin>>str;

gets()以回车为分隔符,可以读入空格:

注意:C++11 标准中,gets函数已被废弃,无法使用gets()对字符数组进行输入,可以使用cin.getline(str1,length)代替。

char str[20];
gets(str);

<istream>中的getline();可自主控制分隔符和读入的数据长度:

cin.getline(a,100);
cin.getline(a,100,'#');'#'终止符
//若str为一个string对象,则getline使用方式如下:
getline(cin,str);

3.输出

printf()、cout<<输出不自带回车符,puts()输出自带回车符:

注:cin>> 和 cout<< 需要包含头文件<iostream>,同时引入命名空间using namespace std;

    char str[20]="hello world";
    puts(str);
    printf("%s\n",str);
    cout<<str;

4.字符串操作

需要包含头文件<string.h>或<cstring>

基本操作(常用)

strcpy(p, p1) 将p1拷贝到p
strncpy(p, p1, n) 将p1中前n个字符拷贝到p
strcat(p, p1) 将p1接到p后面
strncat(p, p1, n) 将p1中前n个字符接到p后面
strlen(p) 获得字符串长度
strcmp(p, p1) 比较字符串,若p>p1,返回1,否则返回0
strcasecmp(p, p1)忽略大小写比较字符串
strchr(p, c) 在字符串p中查找指定字符,返回一个指针, 指向字符c在p中首次出现的位置, 如果没有找到, 则返回NULL
strrchr(p, c) 在字符串p中反向查找,查找字符c在字符串p中最后一次出现的位置
strstr(p, p1) 查找字符串,返回子串p1在p中首次出现位置的指针. 如果没有找到子串, 则返回NULL.
strtok(p,p1)按照p1指向的字符串中的字符(如空格),切割p指向的字符串(只切割一次)

 字符串到数值类型的转换

atoi(p) 字符串转换到 int 整型
atof(p) 字符串转换到 double 符点数
atol(p) 字符串转换到 long 整型

字符检查

isalpha() 检查是否为字母字符
isupper() 检查是否为大写字母字符
islower() 检查是否为小写字母字符
isdigit() 检查是否为数字
isspace() 检查是否为空格类型字符
ispunct() 检查是否为标点符号
isalnum() 检查是否为字母和数字

三.字符串类型字符串的基本操作(更新ing)

在使用string类时,必须包含string头文件以及using namespace std;

参考链接:C++string类常用方法_Goallegoal的博客-CSDN博客_c++ string的常用方法及其功能

四.字符串类型的转换

1.将字符串转换为字符数组

s.c_str();

2.字符数组转换为字符串

char ch [] = "ABCDEFG";
string str(ch);//或string str = ch;

转换为string后就可以用string的函数如s.substr(开始位置,字串长度)

char c[8]={‘2’, ‘0’, ‘1’, ‘8’, ‘1’, ‘2’, ‘0’, ‘3’ } 怎么获取月份

string s(c);

s.substr(4, 2);

3.将整数i转换为字符串表示形式

string s = to_string(i); 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dorakmon0219

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值