string

string

写几个常用的

输入方式

1
2
3
string s1;
cin>>s1;
scanf("%s",s1.c_str()); //不建议

比较方式

1
2
3
4
5
6
7
8
9
10
11
12
13
string s1;
cin>>s1; //输入hello
if(s1=="hello")//可以直接比较
{
...
}
但如果是字符数组
char s2[100];
cin>>s2; //输入hello
if(strcmp(s2,"hello"))//要通过strcmp进行比较
{
...
}

插入

1
2
str.insert(pos,str2); //在下标为pos的字符前插入string类型的对象str2的副本
str.insert(pos1, str2, pos2, len); //在下标为pos1的z字符之前插入string类型str2中从下表为pos2开始的len个字符

删除

1
2
3
str.erase(pos,count);
str.erase(10,8); //删除str[10]开始的8个字符
str.clear(); //删除全部字符

返回子串

1
2
str.substr(pos,count);
str.substr(10,8);//复制str[10]开始的8个字符,返回string类型

判空

1
str.empty();

查找

1
2
3
4
5
6
7
string s1="asdfghjkl"
string s2="hjk";//也可为字符数组
int startPos=0;
int pos=s1.find(s2,stratPos);//若能够找到则返回第一次出现的下标
//若找不到,则返回-1
pos=s1.find(' ') //找空格并删除
s1.erase(pos,1);

赋值

1
2
3
4
5
string s1="abc";
string s2="def";
string s3=s1+s2;//s3="abcdef"
char str[10]="hello";
s1=str;//字符数组赋值为string

描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入

in

#include
int main()
{

printf(“ Hi “);
}

样例输出:

#clude
tma()
{

prtf(“Hi”);
}


匹配串复制一份,模式串和复制的串全部转换为大写或者小写进行匹配,用find找到位置,在匹配串和复制串中都进行删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int main()
{

char str[101];
gets(str);
string p=str;
for(int i=0;i<p.length();i++)
{
p[i]=tolower(p[i]);
}
while(gets(str))
{
string a=str; //小写
string b=a; //原始
for(int i=0;i<a.length();i++)
{
a[i]=tolower(str[i]);
}
int pos=a.find(p);
while(pos!=-1)
{
a.erase(pos,p.length());
b.erase(pos,p.length());
pos=a.find(p);
}
int t=b.find(' ');
while(t!=-1)
{
b.erase(t,1);
t=b.find(' ');
}
cout<<b<<endl;
}
return 0;
}


这里用了gets(str)进行了字符串的输入,这里做一下gets与scanf的区别

  • gets依次读取遗留在输入缓存中的数据,直至遇到换行符,并将换外的所有字符保存在字符数组中(后面加’\0’),同时从输入缓冲中去除该换行符(‘\n’),所以可以用while(gets(str))一行一行的读取数据(换行符被去除了)。
  • scanf(“%s”)读取输入缓存中的数据,直至遇到空格或换行,但scanf不会把空格或换行从输入缓存中移除,从而导致后续的gets函数不能正常使用。
    如:
    1
    2
    3
    4
    5
    scanf("%s"str1); //输入aabb并回车
    gets(str2); //输入ccdd,但str2读取的是'\n'

    scanf("%s",str1); //输入aa空格bb
    gets(str2);//此时str1="aa",str2=" bb"(前面有个空格)