STL神器之传说中的字符串——string

本文介绍了C++中的字符串类型string,包括其基本定义、输入输出操作、常用函数及操作符。通过实例展示了如何使用string记录购物清单,强调了string在处理文本数据时的便利性,如直接输入输出和getline()函数的使用。
摘要由CSDN通过智能技术生成

hello,苦力怕又跟大家见面啦。今天又有一个朋友跟我说他要让我帮他记记他去逛街买了些啥,具体的呢就是说他想让我编个程序(怎么天天叫我编程序),他每买一个东西就把东西的名字输入到我的程序中来,逛完街以后他想看看他到底买了啥,要不然心里没底儿,怕人多收他钱。

然后,就没有然后了,就是这样一个the easiest的问题,却让一些人做不出来,因为名字有可能有很多个字,有人可能会问,我们不是有vector吗,但是!作为新一代懒人,我们还有更好的方法。。。

对,string出场了。


string是个啥

string也是一个标准库类型,它就是字符串,准确说是C++风格的字符串,因为毕竟还有C风格字符串吗(其实就是字符数组)。

可能有些玩过python的人对str有些印象,而我们今天所学习的string就是个跟str差不多的东西

比如都是可以直接输入输出的,不像C风格,还要一个一个getchar。还有比如都可以想多长就多长。

所以是不是很想来康康怎么用的呢?


string的各种操作

string的引入

因为string是一个标准库(STL)类型,所以需要包含头文件

#include <string>

但是它也在万能头<bits/stdc++.h>中,所以用了万能头就不用引入<string>啦。

string的定义

string的定义分为6种形式,但是如果你理解透彻了,你就会发现其实他们都是差不多的

string的定义形式
代码形式含义
string s1;

初始化一个新string叫做s1,并将其初始化成一个空串

string s2(s1)

创建一个string对象叫做s2是s1的副本,被称为直接初始化

string s2 = s1同上一个,不过是拷贝初始化
string s1("data")创建一个string对象叫做s1是"data"这个字面量的副本,被称为直接初始化
string s1 = "data"同上一个,不过是拷贝初始化
string s1(n, 'c')创建一个长度为n的string对象,其中每个字符都是‘c'

我比较推荐前五种,最后一种很容易把两个参数写反,又要一堆的调试时间,还不如一个一个加

string的各种操作

1)输入输出

string很方便,提供了<<以及>>运算符可以通过istream或ostream输入输出

注意,它碰到一个空格就结束读取了

比如可以这样

string s;
cin >> s;
cout << s << endl;

光光从这一点,就足以让我们从C风格改用string了。

还有就是string提供了一个好东西:getline()

这个函数的作用是从标准输入流中读入一整行再存到一个字符串里(没有换行符)

语法如下

getline (/*istream对象*/ , /*存放结果的string*/); 

2)各种函数

string有两个比较常用的函数,分别是empty和size,他们的作用分别是判断string是否为空以及string的大小

语法如下

s.empty() // 返回一个bool内容是s是否为空
s.size() // 返回一个string::size_type,其实就是一个无符号整数,代表s所包含的字符个数

3)各种操作符

string有几种操作符

No.1 []

中括号我们再熟悉不过了,就是下标运算符,用法跟数组与vector一毛一样,我就不废话了

No.2 +

加号与我们整数的加法有很大区别,string的加法就是返回一个把后面的字符追加的前面的字符的后面的字符串,其实就是把俩字符串拼在一起

No.3 == 与 != 

这个很好理解,就是判断两个字符串是不是一毛一样

No.4 < > <= >=

这个跟vector一样,就是按字典序比,注:字符之间的比较比的是ASCLL码

其他

关于其他的就是+=,s += s1 就等同于s = s + s1,没什么好废话的


答案

好了,我们就来解决上面那个问题,就是建一个vector<string>,其他的就还是先输入,再遍历vector输出

#include <iostream>
#include <vector>
#include <string> // 注意不要漏了
using namespace std;
int main() {
    vector<string> things; 
    string t; // 用来存储名字
    while (cin >> t) {
        things.push_back(t); // 加入操作
    }
    for (string i : things) { // 范围for循环,C++11新特性
        cout << i << endl; // 输出
    }
    return 0;
}

OK,那我就讲到这里,我们下次再见咯。^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值