字符串string对象

字符串、向量和数组(1)

标准库类型string

string表示可变长字符序列,使用其必须先包含string头文件。string定义在std命名空间。

定义和初始化string对象

string s1;  //默认初始化,空串;
string s2 = s1; //s2是s1的副本;
string s5(s2);
string s3 = "hiya"; //是字符串字面量的副本;
string s6("hiya");
string s4(10, 'c'); //s4="cccccccccc";

直接初始化和拷贝初始化

使用=的初始化变量是执行的拷贝初始化,反之不用等号的初始化就是直接初始化。

string s5 = "hiya"; //拷贝初始化;
string s6("hiya");  //直接初始化
string s7(10, 'c'); //直接初始化;

string对象上的操作

读写string对象

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

string对象会自动忽略开头的空白(空格、换行、制表符等)并从第一个真正的字符开始读起,直到遇到下一个空白为止:
例如:s为" Hello world ",那么s实际为Hello;
string对象此类操作也是返回运算符左侧的运算对象作为其结果:

string s1, s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;

读取未知数量的string对象;

int main(){
    string word;
    while(cin>>word) {
        cout<<word<<endl;
    }
    return 0;
}

一旦输入遇到文件结束符或非法输入循环自然就结束了。

使用getline读取一整行
getline函数参数一个是输入流,一个是string对象,函数会从输入流中读取内容,直至遇到换行符(换行符也会被读取进来),然后把所读的内容存入string中(换行符不会存入)。因此getline()只要一遇到换行符就结束读取操作并返回结果。

int main()
{
    string line;
    while(getline(cin, line)) {
        cout<<line<<endl;
    }
    return 0;
}

string::size_type

对于size()接口而言,返回int之流都是合情合理的,但是string返回的却是string::size_type类型,这个类型是屏蔽了机器类型的,其是一个无符号类型的值(其实很好懂,无非就是int,long,ll之流跟随机器特性变化)。

比较string对象

==, !=检查两个对象相等或不想等,<, <=, >, >=分别看两个string对象的字典序大小;

两个string对象相加

string s1 = "hello", s2 = "world\n";
string s3 = s1 + s2;
s1 += s2;

string对象和字面值相加

必须+两侧至少有一个string对象,同时需要记住字符串字面量和string对象不是同一类型,前者是为了和C兼容及历史原因保留下来。

string s1 = "hello";
string s2 = s1 + ',';   //OK
string s3 = '!' + s1;   //OK
string s4 = "hello" + ',';  //error

处理string对象中的字符

头文件:

isalnum(c); //当c是字母或数字为真;
isalpha(c); //当c是字母时为真;
isdigit(c); //数字为真
iscntrl(c); //控制符为真;
isgraph(c); //不是空格但是可打印为真;
islower(c); //小写字母时为真;
isprint(c); //当为可打印时为真;
ispunct(c); //当c是标点符号时为真;
isspace(c); //为空格为真;
isupper(c); //大写字母时为真;
isxdigit(c);    //十六进制数字为真;
tolower(c); //输出字母对应的小写形式;
toupper(c); //输出字母的大写形式;

遍历string对象

1.for-base形式

for(int i = 0; i < s1.size();i++)
    //do-something;
for (auto c : s1)
    //do-something;

上面都是string基本特性,一个是为了梳理,一个是避免有没有新特性遗漏;

原文链接: https://www.cnblogs.com/zhanghanLeo/p/13138678.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    字符串string对象

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/355660

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午10:27
下一篇 2023年3月2日 上午10:28

相关推荐