字符串 总结
2024-04-04 23:46:44
发布于:浙江
字符数组存储字符串
1. 字符数组初始化:
① char a[7] = {'h', 'i'};
//和整型数组初始化类似,部分初始化:只要做了初始化操作,未被初始化的为0,'\0'的ascii码值为0
② char a[7] = "hello!";
//这种初始化方式计算机会自动补一个'\0',所以数组大小比字符串长度多一位
2. 字符串输入输出
① 输入不带空格或者换行符的字符串
char s[100];
cin >> s;
使用cin函数读取字符串时会自动用空格或者换行符来判断一个字符串的结束,读取的字符串会自动加'\0',数组大小比字符串长度多一位 。
② 输出
char s[10] = "abdce";
cout << s;
③ 读取带空格的字符串
用法:
fgets(数组名,数组大小,stdin);
举例:
char s[10];
fgets (s,10,stdin);
3. 字符读取
① cin:读取一个字符,会自动过滤空格' '和换行'\n'
② cin.get():读取空格' '和换行'\n'在内的任意字符
ch = cin.get();
cin.get(ch);
4. 字符数组存储的字符串 相关函数
注意:这里的 字符串 指的字符数组名字
5.两个字符串之间怎么比较大小?
① 字符串大小的比较,是从首个字符开始,逐个比较相同位置字符的ASCII码大小,以首个不相等的字符的ASCII码值大小确定字符串的大小。
② 两个字符串长度相同,且每一个对应位置的字符都相同, 则说明两个字符串相等。
字典序:即按照字符ASCII码值进行排序
string
想用string类型需加 #include<string>以及using namespace std;
1. 定义:
string s;
定义时不占用电脑内存,即只定义了一个列车号,没有造出小火车
内存使用自动,需要多少开辟多少 能够根据字符串大小的变化自动调整所开辟的内存,无需提前知道字符串的长度。
2.初始化:
①
string s;// 初始化为空
② string变量初始化为期望的字符串
string s="xiao ma jun";
③ 定义一个string类型变量s,把s初始化为由n个'z'字符组成的字符串
int n=10;
string s(n,'z');
3.输入输出
① 输入不带空格或者换行符的字符串
string s;
cin >> s;
使用cin函数读取字符串时会自动用空格或者换行符来判断一个字符串的结束,读取的字符串会自动加'\0',string是自动开辟空间的,做题不需要考虑'\0'
②输出
cout << s;
③读取带空格的字符串,读取以换行符作为结束标志。
getline(cin,s); 等价于 getline(cin,s,'\n');
④读取以结束字符作为结束标志的字符串。
getline(cin,s,'结束字符');
4. string相关函数
5. string 遍历
for(int i=0;i<s.size();i++) {//字符串下标从0开始
//遍历字符串每一个字符:字符串名[下标]
//对s[i]进行操作
}
应用:
删除s1中所有s2
while(s1.find(s2)!=string::npos){
s1.erase(s1.find(s2),s2.size());
}
string 数组
1. 定义:
数据类型(string类型) 数组名[数组大小]
string s[10];
2. 初始化:
string s[10]={"xiao","ma","jun"};
int a[10]={1,2,3};
字符串数组初始化和整型数组类似 ,字符串常量放在双引号里面
区别:无论定义成全局变量还是局部变量,定义完成后字符串数组均为空字符串
3. 数组元素:
数组名[下标] 相当于一个string类型的变量
4. 对于string数组进行排序
需要加 #include<algorithm> using namespace std;
对于s[1]~s[n]进行排序
sort(s+1, s+n+1, cmp);
//s是s[0]的地址 s+x就是s[x]的地址 左闭右开[)
没有cmp默认按照字典序从小到大进行排序
bool cmp(string x,string y){
return x>y;
}
5. 对于string数组元素进行反转
需要加 #include<algorithm> using namespace std;
对于s[1]~s[n]进行反转
reverse(s+1, s+n+1);
//s是s[0]的地址 s+x就是s[x]的地址 左闭右开[)
比如:
string s[3]={"xiao","ma","jun"};
reverse(s+0,s+2+1);
for(int i=0;i<3;i++){
cout<<s[i]<<" ";
}
//jun ma xiao
注意:int double ~~数组 可以排序也可以反转哦
stringstream
1. 定义:
string是特殊的数据类型,string与其他数据类型之间也可以进行转换,需要靠stringstream来实现!
stringstream是c++标准库提供的字符串流,作为定义字符串流的数据类型;
stringstream就像iostream一样,可以当做是存放数据的管道,可以把数据放入管道中也可以从管道中
读取数据。
2.stringstream的使用
需要添加头文件sstream
string s="1234.123";
double x;
stringstream sin; //新建了一个stringstream 管道,管道名为sin (可以叫别的名字)
sin<<s;//把变量s中的数据放入管道中
sin>>x;//从管道中把数据取出放到变量x中
尖头对着谁就是把东西给谁
管道如果要多次使用要清空 或者重新定义
sin.clear();
3.stingstream应用
(1). stringstream用于string类型与其他数据类型之间的类型转换
(2). stringstream具备的功能:数据的拆分
从sin管道取出数据以空格隔开
①原字符串中是以空格,逗号,加号或者其他符号分隔,先遍历原字符串将用来分隔的字符全部换成空格 ;
②放入sin管道;
③从管道中依次取出(不知道取多少次用while循环读取)以空格分割开的数据进行操作。
#include<iostream>
#include<sstream>// stringstream
#include<string>
using namespace std;
int main(){
//算123+456+789+129的和
string s="123+456+789+129";
for(int i=0;i<s.size();i++) {
if(s[i]=='+'){
s[i]=' ';
}
}
stringstream sin; //新建了一个stringstream 管道,管道名为sin
sin<<s;//把s中的数据放入管道中 管道中为 123 456 789 129
int x,sum=0;
while(sin>>x){//从管道中依次取出(不知道取多少次用while循环读取)以空格分割开的数据进行操作,取完会自动结束哦。
sum+=x;
}
cout<<sum;
return 0;
}
数据的转换和数据的拆分就是stringstream最长使用的两个功能
这里空空如也
有帮助,赞一个