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:

题里有个条件,你要拆成两个相同的子序列,所以若两个序列不相同,并且个数为奇数就判掉

posted @ 2024-09-15 08:35  daydreamer_zcxnb  阅读(10)  评论(0编辑  收藏  举报