首页 > 编程语言 >C++中的string

C++中的string

时间:2024-05-10 15:25:42浏览次数:12  
标签:std string s2 s1 C++ 字符串 true

一、定义和初始化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

相关文章

  • C#中的System.Security.SecureString学习
    有一次在公司review代码时,有一个password的字段,原来用的是String类型,有同事提到应该用SecureString比较好于是我花了点时间了解了一下什么是SecureString,以及它与String类型的区别正常的String类型值,在脱离开作用域后,它的值在内存中并不会立即被销毁.这个时候,如果有人恶意扫......
  • C++ 类的继承(Inheritance)
    一、继承(Inheritance)C++有一个很好的性质称为inheritance(继承),就是声明一个class(derivedclass),把另一个或多个class(baseclass)的所有内容(包括datamembers和memberfunction)统统继承下来(有无存取权限是另一回事)。如果直接继承自一个baseclass,称为单一继承;如果直接继承自一......
  • C++基础知识
    单行注释//多行注释/**/常量#define常量名常量值const数据类型常量名=常量值关键字不要和变量或常量重名数据类型短整型(2字节)-整型(4字节)-长整型(4字节)-长长整型(8字节)short<int<=long<=longlong实型float(4)-double(8)科学计数法3e23*10^23e-23*......
  • C/C++ 泛型 -- 继承与多态
    【1】继承与多态-- 多态在模板中的应用#include<iostream>usingnamespacestd;namespace_nmsp1{//多态//人类classHuman{public:virtualvoideat(){cout<<"人类以吃米饭和面食为主!"<<endl;......
  • C++ 结构体
    结构体结构体(struct),是一种用户自定义复合数据类型,可以包含不同类型的不同成员语法:    structStudent{stringname;intage;stringsex;};Studentstu;stu={"张三",20,"男"};cout<<"名字:"<<stu.n......
  • 传统C++回顾
    主要参考菜鸟教程,用于回忆当时没有好好学习的C++98Vector的学习#include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>myVector;myVector.push_back(3);myVector.push_back(7);myVector.push_back(11);myVector.push_back(5......
  • C++ const常量指针
    const常量指针const是C++关键字,译为常量,const指针即为常量指针。分为三类指向const的指针const指针指向const的const指针指向const的指针表示指向区域的数据是不可变的,但是可以更换指向语法(将const卸载*之前):const数据类型*指针名数据类型const*指针名......
  • C++ 数组元素操作
    数组元素的移除核心思路:创建一个新的内存空间存储移除后的数组,再将原数组delete释放,再将指针指向新数组。cout<<"-----------------------------数组元素的移除-------------------------"<<endl;//cout<<deleteArrByIndex(0,arr11)<<endl;//示例数组int*p......
  • C++面试考点
    c++基础1、malloc/free和new/delete的异同点?2、cpp程序运行时内存模型?答:代码区,只读的区域,是代码被翻译成二进制机器指令存储的地方;数据区,分为初始化数据区和未初始化数据区,用来存储全局变量和static变量的地方;堆区,动态内存分配的地方,new和malloc分配就是从此处分配;栈区,函数调用......
  • GCC编译C++步骤
    在使用GCC编译器编译多个源文件时,你需要将所有需要编译的源文件列出,并在命令行中将它们一起传递给GCC。GCC会将这些源文件编译成目标文件(.o文件),然后链接成最终的可执行文件或动态库。下面是一个示例命令行:bashCopycodeg++-cfile1.cppfile2.cppfile3.cpp在这个......