一、定义和初始化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() 如果参数是小写字符,返回其大写,否则返回该参数
标签:std,string,s2,s1,C++,字符串,true
From: https://www.cnblogs.com/baobaobashi/p/18184422