C++ 中string相关知识小结

疫情所迫,希望用这种方法督促自己坚持学习。同时记录在找工作过程中的艰辛不易。博客内容持续增减修改,都为摘录和个人理解。欢迎各位批评指正其中错误,相互勉励,共同进步。
标准库内型String表示一个长度可变的字符串序列。相较于字符数组,其更加灵活。操作更加方便。

//头文件定义
#include<string>
using std::string;

一、String的定义和初始化

//分为直接初始化和拷贝初始化(有等号就认为是拷贝初始化)
string s1;                   // 未分配内存大小的变量
string s2(s1);               // 将s1拷贝给s2 直接初始化
string s3 = "Hello!";        // 拷贝初始化
string s4(10,'A');           // s4中有10个‘A’ 直接初始化

二、String基本操作

string s;           //定义string内型变量s
s.empty();          //判断s是否为空,空返回true,否则返回false
s.getline(s,s1);  //按行读取字符串,以换行符判断,读取一行s1给s
s.size();	        //返回s中非空长度,内型为string::size_type
s1 == s2;           //比较两个字符串,以第一个相异字符的大小判断
s1 + s2;            //将两个字符串首尾相连

示例代码一:
用cin输入string时,遇到空格就作为结束标志。当利用getline()函数时,以换行符作为结束标志。下面两段代码分别输入“Hello Word!”时,分别输出"Hello"和“Hello Word!”。

//用cin读取string内型变量
string word
while(cin>>word)
	cout<<word<<endl;
//用getline读取string内型变量
string line
while(getline(cin,line))
	cout<<line<<endl;

示例代码二

  • 在使用empty()函数判断是否为空注意加“!”;
  • 当合并两个字符串时可直接用“+”,但是注意不能将两个字面值直接相加,例如:s3 = “ABC” + “DEF” ,就会编译报错;
  • 字符串的比较不是依据字符串长短,而是两个字符串出现的首个相异字符的大小,例如下面代码中 s2 是大于 s1 的;
  • size()函数的返回值内型为 string::size_type 因此可有如下两种定义:string::size_type len = s.size(); 或者 auto len = s.size();
string s1 = "ABCDE";
string s2 = "ACD";
if (!s1.empty() && !s2.empty()) {
	string s3 = s1 + s2;
	string s4 = (s1>s2) ? s1 : s2;
	string s5 = (s1.size()>s2.size()) ? s1 : s2;
}

三、String变量中的单个字符处理

C++也定义了很多直接对string内型变量中的单个字符的操作函数,如下图所示(来源于Primer c++ 第五版 P82):
需要记住常用的几个函数,如:toupper, tolower, isupper, islower, isspace.

基于范围的for语句
遍历给定序列中的所有元素,并对该元素执行操作。其基本形式如下所示。其中declaration为变量定义,expression为给定的序列,statement为执行的操作。

for(declaration: expression)
	statement

示例代码一:

// s输出为:WAS LIKELY TO CONSIDER AS NEGLIGIBLE.
// 使用基于范围的for语句 需要注意定义的t是引用类型,不然无法改变字符串中的值
string s = "Was likely to consider as negligible.";
	if (!s.empty()) {
		for (auto &t : s) {
			if(isalpha(t)) t = toupper(t);
		}
	}
// 使用下标访问
string s = "Was likely to consider as negligible.";
	if (!s.empty()) {
		for (int i = 0;i<s.size();i++) {
			if(isalpha(s[i])) s[i] = toupper(s[i]);
		}
	}

示例代码二:

//显示字符串中的非空格和标点
//输出结果为:Waslikelytoconsiderasnegligible
string s = "Was likely to consider as negligible.";
	if (!s.empty()) {
		for (auto t : s)
			if (!ispunct(t) && !isspace(t)) cout << t;
		cout << endl;
	}
发布了27 篇原创文章 · 获赞 4 · 访问量 4521

猜你喜欢

转载自blog.csdn.net/SGL_LGS/article/details/104611432
今日推荐