2.1字符串处理
概念理解
c风格字符串
字符数组大小比字符串多一个
char s[6]={'H','e','l','l','o','\0'};
char s[]="Hello";
用法
1.存储方式及赋值
'\0' 占用存储空间,不计入长度
作为变量使用时,不可
s="hellow"
s1=s2
只可以逐个字符赋值
sscanf(s,"%d",&n);\\将字符串s转化为数字n
sprintf(s,"%d",n);\\将整数n转化为字符串s
指的是从字符串中输入,将字符串输出到整数n中,并不是程序输入输出
2.读入方式
\(getchar,cin,scanf\)可读入一个字符
char c;
c=getchar();
scanf("%c",&c);
cin>>c;
\(cin,scanf\)可读入第一个不含空格的字符串
cin>>s;
scanf("%s",s);
\(gets\)可读入一行字符串
gets(s);
多次\(getchar\),是快读的基本写法
int i=0;
whie((s[i]=getchar())!='\n') i++;\\读到换行前
无限输入法
while(scanf()!=EOF)
while(cin>>···)//cin没有读到字符会返回0
手动输入ctrl+Z可停止
string类型
用法
区别于char
string s1,s2;
s1=s2;
初始化
string s2(s1);//用s1初始化s2
string s3("sb");
string s4(n,'a');//赋值为n个'a'
读入
cin和cout会读到空字符为止(没有空字符)(可读入中文)
getline可读入一行字符,包括空格
getline(cin,s);
常用操作
s1+s2连接s1,s2
s1==s2
s.empty()
s.size()
s.length()
s.insert(pos,s2)下标pos前插入s2
s.erase(pos,n)删除下标为pos起的n个字符
s.find(s2,pos)在下标pos起查找s2第一次出现的位置,找不着返回值一般为-1
s.replace(pos,n,s2)将s下标pos起的n个字符替换为s2
s.substr(pos,n)返回从下标为pos起的n个字符
s.clear()
stoi(s)转int(有符号)
stoll(s)转long long(有符号)
stoull(s)转unsigned long long
stof(s)转float
stod(s)转double
T1:
注:\(sscanf\)有取地址符,\(sprintf\)没有
T2:
注:
string类型 \(s[n+i]=s[i]\) 是无法改变string长度的,必须 \(s1+=(char)c\) 才行,其次string类型不能用一个char来定义
T3:
找到一个替换一个
T4:
破环成链,从大到小枚举字符串长度,进行匹配即可
T5:
手动写快排cmp即可
T6:
同T5
T7:
反正我有的是时间,我枚举所有的情况(0~6),判断是否合法即可
T8:
这道题的输入很屎,样例和最后的输入方式不同,要注意
T9:
此题没有意义!
根本不知所云
打了一个只查找一个文件的代码发现过不了后,就不明白这个题想要表述什么了,终于在极端的愤怒下决定递一份代码上去,但是下不为例
T10:
题里有个条件,你要拆成两个相同的子序列,所以若两个序列不相同,并且个数为奇数就判掉