[C++学习]标准库类型string总结

本文详细介绍了C++中string类型的使用方法,包括初始化、读写、比较、相加及字符处理。通过实例演示了如何利用string类型进行字符串操作,适合初学者及需要复习string用法的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义与初始化

使用string类型必须包含string的头文件,并且定义在命名空间std中,需要以下代码:

#include <string>
using std::string;

常见初始化string对象的方法

string str1; // str1为空字符串
string str2(str1); //str2为str1的副本
string str3 = str1; // 等价于str3(str1)
string str4("helloworld!"); // str4的字面值为"helloworld"的副本
string str5 = "helloworld!"; // 等价于str5("helloworld!")
string str6(n, 'a'); // 把str6初始化为n个连续字符a组成的字符串

string对象上的操作

1. 读写string对象
string str;
cin >> str;
cout << str << endl;

执行以上代码时,string对象会忽略开头空白(空格符、换行符、制表符等)并且从真正的第一个字符开始,直到遇见下一个空白。例如输入"hello world!"时输出只有"hello"。

读取未知数量的string对象:

string str;
while (cin >> str)
{
    cout << str << endl;
}

结果:

linzijie@DESKTOP-3HKDU47:~/code$ ./string
hello world!
hello
world!

使用getline读取一整行:

string line;
while (getline(cin, line))
{
    cout << line << endl;
}

结果:

linzijie@DESKTOP-3HKDU47:~/code$ ./string
hello world!
hello world!
this is a cpp program!
this is a cpp program!
2. empty与size操作
string line;
while (getline(cin, line))
{
    if (!line.empty())
    {
        cout << "size: " << line.size() << endl;
        cout << line << endl;
    }
}

结果:

linzijie@DESKTOP-3HKDU47:~/code$ ./string

hello world!
size: 12
hello world!

size函数的返回值类型为string::size_type,尽管不清楚其细节,但是它一定为一个无符号类型值,并且能够存放下任何string对象的大小。

3. 比较string对象

相等性运算符 "==" 和 "!=" 分别检验两个string对象的相等和不相等。

关系运算符 "<"、"<="、">"、">=" 检验一个stirng对象小于、小于等于、大于、大于等于另外一个string对象,这些运算符依照以下字典(大小写敏感)顺序:

  • 如果两个string对象长度不同,并且较短string对象的每个字符都与较长string对象对应位置上的字符相同,则较短string对象小于较长string对象。
  • 如果两个string对象在某些对应位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果。
4. 字符串相加
string s1 = "hello ";
string s2 = "world!\n";
string s3 = s1 + s2; // s3字面值为"hello world\n"

string s4 = "hello";
string s5 = "world";
string s6 = s4 + " " + s5 + "!\n"; // s6字面值为"hello world\n"

当字面值与string对象相加时,必须保证每个加法运算符的两侧至少有一个时string对象。下面是一些错误写法

string s1 = "hello " + "world!\n"; // 错误写法
string s2 = "world";
string s3 = ("hello" + ",") + s2; // 错误写法

提示:C++中字符串字面值并不是标准库类型string的对象,字符串字面值与string是不同的类型!

5. 处理string对象中的字符

在cctype头文件中定义了一些字符判断与操作, 点击查看

基于for循环的字符处理,统计string对象中小写字母数量:
string str("hello world!");
int lowercase_count = 0;
for (auto c : str)
{
    if (islower(c))
    {
        lowercase_count = lowercase_count + 1;
    }
}
cout << "lowercase count = " << lowercase_count << endl;
部分字符处理

访问string对象中单个字符的方法有两种: 下标和迭代器。

迭代器方法有单独的方法总结,点击查看

下标运算符([ ])接受string::size_type类型参数,这个参数表示要访问的字符位置,返回该位置上字符的引用。下标从0开始,到s.size()-1结束。

使用超过范围的下标将引发不可预知的后果,使用下标访问空string也会引发不可预知的后果。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s("hello world!");
    // C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型
    for(decltype(s.size()) index = 0;
        index != s.size() && !isspace(s[index]); ++index)
            s[index] = toupper(s[index]);
    cout << s << endl;
    return 0;
}

转载于:https://www.cnblogs.com/linzijie1998/p/11543283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值