C++中字符串的常见用法

C++中字符串的常见用法

一.字符数组

(1)与字符串的区别

字符串就是字符数组加上结束符’\0’,如果定义一个字符数组,直接用“ ”赋值的话,末尾会自动添加’\0‘,也算一个空间。

(2)字符数组的读入与输出

读到空格或回车为止
输入:

char s[100];
scanf("%s",s);

scanf("%s",s+1);//从下标1开始读入

cin>>s;

cin>>s+1;

输出:

printf("%s\n",s);

printf("%s\n",s+1);

cout<<s<<endl;

cout<<s+1<<endl;

puts(s);//相当于cout<<s<<endl;

如果想要接受空格,读一整行的话
输入:

char s[100];

fgets(s,100000(最多读入的数的个数,可以设置一个较大的数字),stdin);

cin.getline(s,100);//100表示这一行最多读入多少字符

scanf("%[^\n]",s);//scanf的其他用法,一直读到\n为止,[]内容可以更换

gets(s);//现在基本不用了

(3)一些函数

以下字符串全部都是用字符数组表示的

1.strcat(字符串1,字符串2);//将字符串2链接到字符串1的后边,返回字符串1的值

2.strcat(字符串1,字符串2,长度n);//将字符串2前n个字符链接到字符串1后边,返回字符串1的值

3.strcpy(字符串1,字符串2);//将字符串2复制到字符串1,返回字符串1的值

4.strcpy(字符串1,字符串2,长度n);//将字符串2前n个字符复制到字符串1,返回字符串1的值

5.strcmp(字符串名1,字符串名2);//比较字符串1和2的大小,按字典序比较,字符串1>2就返回1,相等返回0,小于返回-1

6.strcmp(字符串名1,字符串名2,长度n);//比较字符串1和2前n个的大小,按字典序比较,字符串1>2就返回1,相等返回0,小于返回-1

7.strlen(字符串);//返回字符串的长度,不算'\0'

8.strlwr(字符串);//将大写字母全部转换成小写

9.strupr(字符串名);//将小写字母全部转换成大写

二.字符串

(1)字符串输入和输出

输入

string s;
cin>>s;
不能用scanf读入,会报错的

输出

printf("%s\n",s.c_str());//s.c_str会返回存储这个字符串的字符数组的首地址

读入一整行:

getline(cin,s);

(2)string的一些方法

s.length();//返回s的长度,会把字符串循环一遍,O(n)复杂度

s.empty();//返回s是否为空,是1否0

s.size();//返回s的长度,但是是O(1)

s.substr(begin,length);//截取以begin为下标,长度为length的字符串。其中,可以省略两个参数,这样返回整个字符串;省略第二个参数,默认返回从begin到结尾

s.find(字符);//查找是否有该字符,找到返回下标,没有返回-1

a.to_string();//其中a为int类型,将a转换成string类型

stoi(s);//把s转换成int类型

s.replace(begin,length,ss);//把下标为begin,长度为length的字符串替换为s

s.append(ss);//在后面添加ss这个字符串,也再传入两个参数来截取ss的范围

s.push_back(字符);//在末尾加上一个字符

s.pop_back();//删除末尾的一个字符

支持所有的比较操作(> = < != ==等)

支持两个string类型的相加操作。

遍历字符串每一个可以这么写:for(char c:s)
如果想改变其中的值:for(char &c:s)

(3)字面值和string

加法运算的时候,字面值和字符都会转换成string对象,直接相加就是将这些string连起来。

但是当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string
string s1=“1”+“2”;这种就是错误的,两个运算对象都不是string
string s2=s1+“1”+“2”;正确,运算顺序是从左到右
s+=“1”+“2”;错误,按照优先级先计算+,即"1"+“2”,不能这么做

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值