C++教程之string

本文详细介绍了C++中的字符串string,包括如何定义与初始化,常用操作如getline的使用,以及字符类型的判断和转换。文章通过实例展示了string在实际编程中的应用。

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

前言

前一篇文章我们已经了解了C++中的基本类型,C++还提供了很多抽象数据类型,例如字符串string,string包含多个字符,以及可变长度的vector,vector可以包含多个同一类型的对象。

使用using声明

在之前的程序中可以看到我们通过命名空间来解决可能的命名冲突,代码如下

# include<iostream>
int main() {
    std::cout<<"please enter two numbers:"<<std::endl;
    int v1, v2;
    std::cin>>v1>>v2;
    std::cout<<"The sum of two numbers is "<<v1 + v2<<std::endl;
    return 0;
}

这样看来每次调用cin和cout时都要带上命名空间和范围标识符会显得比较繁琐,就像在Java中每次调用方法都要带上包名和类名一样,Java使用import关键字来引入依赖,在C++中则是使用using关键字来解决这个问题,例如上述例子可以通过using std::cin来表示引入std命名空间内的cin。

# include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
    cout<<"please enter two numbers:"<<endl;
    int v1, v2;
    cin>>v1>>v2;
    cout<<"The sum of two numbers is "<<v1 + v2<<endl;
    return 0;
}

如果确定程序中没有命名冲突,可以直接使用using std,不需要分别一一引入,就像Java中直接import一个类。

# include<iostream>
using namespace std;
int main() {
    cout<<"please enter two numbers:"<<endl;
    int v1, v2;
    cin>>v1>>v2;
    cout<<"The sum of two numbers is "<<v1 + v2<<endl;
    return 0;
}

需要注意的是头文件不能使用using,因为头文件的内容是需要拷贝到引入头文件的文件当中去,如果多个头文件使用using引入相同的命名空间,程序无法知道使用哪一个,会引发命名冲突。

string

字符串是一系列字符的组合,如果需要使用字符串需要引入头文件string,其也在std命名空间。

string的定义与初始化

string的定义和初始化方法有以下几种

# include<string>
# include<iostream>
using std::string;
using std::cout;
using std::endl;
int main() {
    string s1; //默认初始化,s1是一个空字符串
    string s2 = s1; // s2是s1的拷贝
    string s3(s1); //等同于s2 = s1,s3是s1的拷贝
    string s4("value"); //s4是value的拷贝
    string s5 = "value"; 
    string s6(4, 'c'); // s6是cccc
    cout<<s1<<endl;
    cout<<s2<<endl;
    cout<<s3<<endl;
    cout<<s4<<endl;
    cout<<s5<<endl;
    cout<<s6<<endl;
    return 0;
}
string操作

之前我们曾提到一个对象的类型决定了其存储的方式以及操作,string支持的操作如下

操作解释
os << s将字符串写到输出流
is >> s从输入流中读取
getline(is, s)从输入流中读取一行
s.empty()判断是否为空,如果为空返回true,否则返回false
s.size()返回字符串的长度
s[n]返回第n个字符
s1 + s2将s1和s2拼接
s1 = s2将s2的字符串拷贝给s1
s1 == s2判断s1和s2的字符串是否相等
s1 != s2判断不相等
< <= > >=比较是大小写敏感的

有时候在接受输入时我我们并不想忽略输入的空格,这时候可以使用getline来获取输入的一整行。

# include<string>
# include<iostream>
using std::string;
using namespace std;
int main() {
   string line;
   while (getline(cin, line))
   {
    cout<<line<<endl;
   }
    return 0;
}

字符串是由一系列的字符组成,而字符中有一些分类,例如4是一个数字字符,a是一个小写字母,C++中提供了一些方法可以很方便地判断字符的类型和做一些操作。

函数解释
isalnum如果是字母或者数字返回true
isalpha如果是字母返回true
iscntrl如果是control返回true
isdigit如果是数字返回true
isgraph如果不是空格但是可打印返回true
islower如果时小写字母返回true
isprint如果时可打印返回true
ispunct如果是标点返回true
isspace如果是空格返回true
isupper如果是大写字母返回true
isxdigit如果时16进制数返回true
tolower将大写字母转化为小写字母
toupper将小写字母转化为大写字母

以下代码就是将hello world转化为HELLO WORLD

# include<string>
# include<iostream>
using std::string;
using namespace std;
int main() {
   string line = "hello world";
   for (auto &c : line) {
    c = toupper(c);
   }
   cout<<line<<endl;
    return 0;
}

最后

这篇文章我们了解了C++的string,定义声明和一些操作,更多文章可以关注公众号QStack。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值