C++中的string

一、定义和初始化string

1、默认初始化:

std::string str; // str是一个空字符串

2、使用字面值初始化:

std::string str1 = "Hello, World!"; // str1包含字符串"Hello, World!"  

3、使用字符数组初始化:

char arr[] = "Hello, World!";  
std::string str3(arr); // str3包含字符串"Hello, World!"

4、使用其他std::string对象初始化:

std::string str1 = "Hello";  
std::string str2(str1); // str2是str1的一个副本,包含字符串"Hello"

5、使用n个字符和特定字符初始化:

std::string str5(10, 'a'); // str5包含10个字符'a',即"aaaaaaaaaa"

6、使用子字符串初始化:

std::string str = "Hello, World!";  
std::string subStr(str, 7, 5); // subStr是"World",从索引7开始,长度为5

7、初始化列表

std::string str6 = {"Hello, World!"}; // str6包含字符串"Hello, World!"

二、string对象的操作

1、读写string对象

单个输入输出

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

多个输入输出

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

读取未知数量

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

读取一行的数据保留空白符

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

2、判空和求长度

empty() 函数用于检查字符串是否为空。

while(getline(cin, line))
{
    if(!line.empty())
    {
        cout << line << endl;
    }
}

size() 和 length() 函数都返回字符串中的字符数。
这两个函数在功能上是等价的,只是名称不同。

string s = "Hello,world!";  
cout << "The size of s is " << s.size() << "\n";  
cout << "The length of s is " << s.length() << "\n";

size_type类型

在C++的std::string中,size_type是一个类型定义,它用于表示字符串的大小或索引,确保它们与字符串的实际大小范围相匹配。由于std::string的大小可以是任意大的(取决于可用内存),所以size_type通常是一个足够大的无符号整数类型,以存储字符串的长度或索引。

在C++标准库中,size_type通常被定义为std::size_t,这是一个无符号整数类型,用于表示对象的大小。在大多数情况下,std::size_t是unsigned int、unsigned long或unsigned long long的别名,具体取决于平台和编译器。

使用size_type可以确保当你需要引用字符串的索引或大小时,你使用的是正确的类型,

string s = "Hello,world!";  
auto len = s.size();
//len是string::size_type类型

注意:出现size()不用int类型,避免int和unsigned混用。

3、string对象比较

string类型的比较遵循(大小敏感的)字典序,
通常与ASCII字符集中的顺序相同,但也可以是其他字符集,比如UTF-8编码的Unicode字符集。

1、== :
长度相同,字符也全部相同。

string s1 = "hello world!";
string s2 = "hello world!";
//s1 == s2;

2、> <:
长度不同时,较短的每个字符都与较长对应位置上的字符相同,就说较短string对象小于较长string对象。

string s1 = "hello";
string s2 = "hello world!";
//s1 < s2;

如果在某些对应位置不一样,比较第一对相异字符

string s1 = "hello world!";
string s2 = "hi";
//此处按ASCII字符集处理
//i的ASCII值大于e的ASCII值
//s1 < s2;

空字符串永远比所有非空字符串小

string s1 = "hello";
string s2 = "";
//s1 > s2;

3、>= <=

:>=(大于或等于):当且仅当左侧字符串大于右侧字符串,或者它们相等时,结果为true。

<=(小于或等于):当且仅当左侧字符串小于右侧字符串,或者它们相等时,结果为true。

std::string str1 = "apple";  
std::string str2 = "apple";  
std::string str3 = "banana";  
std::string str4 = "app";  

std::cout << (str1 >= str2) << std::endl; // 输出:1(true),因为str1等于str2  
std::cout << (str1 <= str2) << std::endl; // 输出:1(true),因为str1等于str2  
std::cout << (str1 >= str3) << std::endl; // 输出:0(false),因为str1小于str3  
std::cout << (str1 <= str3) << std::endl; // 输出:1(true),因为str1小于或等于str3  
std::cout << (str1 >= str4) << std::endl; // 输出:1(true),因为str1大于str4  
std::cout << (str1 <= str4) << std::endl; // 输出:0(false),因为str1不小于str4

4、string对象相加

1、string对象间相加

string s1 = "hello";
string s2 = "world!";
cout << s1 + s2 << endl;

//输出:helloworld!

2、string和字面值相加

注意:C++中字符串字面值和string对象不一样

必须保证 + 的左右两边至少有一个是string对象

string s1 = "hello";
string s2 = "world";

string s3 = s1 + "," + s2 + "!";
string s4 = "hello" + "world";
//s4错误

string s5 = "hello" + "," + s2;
//s5错误

加了括号按照运算符规则处理

string s6 = (s1 + ",") + "world";
//此处相当于
string tmp = s1 + ",";
s6 = tmp + "world";

三、处理string对象的字符

isalnum()  如果参数是字母数字,即字母或者数字,函数返回true
isalpha()  如果参数是字母,函数返回true
iscntrl()  如果参数是控制字符,函数返回true
isdigit()  如果参数是数字(0-9),函数返回true
isgraph()  如果参数是除空格之外的打印字符,函数返回true
islower()  如果参数是小写字母,函数返回true
isprint()  如果参数是打印字符(包括空格),函数返回true
ispunct()  如果参数是标点符号,函数返回true
isspace()  如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true
isupper()  如果参数是大写字母,函数返回true
isxdigit() 如果参数是十六进制数字,即0-9、a-f、A-F,函数返回true

tolower()  如果参数是大写字符,返回其小写,否则返回该参数
toupper()  如果参数是小写字符,返回其大写,否则返回该参数
posted @ 2024-05-10 15:14  baobaobashi  阅读(3)  评论(0编辑  收藏  举报