字符串知识点

换行符\n 不是/n错的离谱了


cin :以空格,换行符,制表符(tab键 ‘\t’),因此字符串只能保存一个单词,空格,换行符,制表符还放在输入流中

getline:读取一行,直到遇见换行符,丢弃换行符

get:读取一行,直到遇见换行符,保留到输入序列中

while(getline(cin, str)) cout << str;
//15 _
//I love GPLT

    int n;
    char ch;
    cin >> n >> ch;
    getchar();//这种输入类型,一定要加一个getchar(),读取换行符,
    //要不然getline不会读取内容,读到换行符就停止读写并且丢弃换行符
    string str;
    getline(cin, str);
//I love GPLT!  It's a fun game!
//aeiou
string a, b;
getline(cin, a);
//getchar();不用读换行符,上一行的getline已经读到换行符且丢弃了
getline(cin, b);


sort()排序不是稳定排序 ,sort是主要用到了快速排序(平均时间复杂度为O(nlogn)),还结合了插入排序(时间复杂度为O(n2))和堆排序(时间复杂度为O(nlogn))。
不加自定义函数,sort排序根据字典序从小到大排序,不看长度。

字符串sort字符串排序是不稳定的,当两个元素等价时,前后顺序不一定。
如按字符串的长度从小到大排序,长度相等则按输入的顺序进行输出,所以不能用sort

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>

using namespace std;

bool cmp(string a, string b)
{ return a.size() < b.size();}

int main()
{
    string str[30];
    int i = 0;
    
    while(cin >> str[i] && str[i] != "#")
        i ++;
    
    sort(str, str + i, cmp);
    
    for(int j = 0; j < i; j ++ )
        cout << str[j] << ' ';//排序不稳定
    
    return-0;
}

string的强大之处

比较
String 类的常见运算符包括 >、<、==、>=、<=、!=。其意义分别为"大于"、“小于”、“等于”、“大于等于”、“小于等于”、“不等于”

(1)find
find(str,position)
find()的两个参数:
str:是要找的元素

position:字符串中的某个位置,表示从从这个位置开始的字符串中找指定元素。
str.find(str2) 当str2时str的子串时,返回其在str中第一次出现的位置,如果不是子串,返回string::npos。

if(str.find(str2)!=string::npos)

(2)erase
str.erase(pos,length) pos为要删除的起始位置,length为字符个数
length不指定,则起始位置后面的内容全部删除

erase (iterator first, iterator last);
first和last分别表示范围的起点和终点。需要注意的是,该范围包含first,但是不包含last,即该范围是**[first, last)**。erase()函数的返回值是删除后的字符串。

    string str("This is an example sentence.");
 
    str.erase(10, 8);  
     cout << str;//This is an sentence.
	str.erase(str.begin() + 5, str.end() - 9);
	//This sentence.
    
     str.erase(str.begin() + 9);
     //This is a example sentence.(只删除迭代器所指向的位置的一个字符)
     

比如:Tomcat is a male ccatat ,要删除子串cat,其结果是Tom is a male

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    string a, b;
    getline(cin, a);
    getline(cin, b);
    
    int idx = a.npos;
    while((idx = a.find(b)) != a.npos)
    {
        a.erase(idx, b.size());
    }
    cout << a;
    
    return 0;
}

(3)substr
str.substr(pos, len)表示str从pos这个位置开始拷贝len个字符
返回string

	string str;
    str = "012345";
    cout << str.substr(0, 4);//0123

(4)replace
str.replace(pos, len, str)从pos这个位置开始的len个字符,替换成str这个字符串

str.replace(pos,len, str, spos, slen)把源字符串中从pos开始的len长度的字符串替换成str中从spos开始的,长度为slen的字符串

    str = "I";
    str.replace(0, 1, "234");
    cout << str;//234
    str = "I";
    str.replace(0, 1, "234", 1, 2);
    cout << str;//34

(5)string转int

string str = "12345";
int nu = stoi(str);//nu = 12345;
nu = stoi(str.substr(1));//nu = 2345;

(6)int转string

string str;
n = 2345;
str = to_string(n);//str = "2345";
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值