[C++ primer]第三章笔记--字符串、向量和数组

字符串、向量和数组
1、标准库string
1.1、使用string类型必须首先包含string头文件。
1.2、定义和初始化string对象:string s4(n,'c')=把s4初始化为连续n个字符串c组成的串。
1.3、getline(is,s):从is中读取一行赋值给s,返回is。
1.4、string对象自动忽略开头的空白。
1.5、字面值和string相加时,必须确保每个加法运算符两侧的运算对象至少有一个是string。

练习3.2:编写一段程序从标准输入中一次读取一整行,然后修改使其一次读入一个词。
#include<iostream>
#include<string>
using namespace std;

int main()
{
	string s1;
	getline(cin,s1);//一次读取一整行
	/*while(cin >> s1)
		cout << s1;
		一次读取一个单词*/
	cout << s1 << endl;
	system("pause");
}
练习3.4
#include<iostream>
#include<string>
using namespace std;

int main(){
	string s1, s2;
	cin >> s1 >> s2;
	if (s1 == s2)
		cout << "s1 is equal to s2,and result is:" << s1 << endl;
	else
	{
		if (s1 > s2)
			cout << "s1 is not equal to s2,the biger string is:" <<s1<< endl;
		else
			cout << "s1 is not equal to s2,the biger string is:" << s2 << endl;
	}
	system("pause");
}
是否等长?
#include<iostream>
#include<string>
using namespace std;

int main(){
	string s1, s2;
	cin >> s1 >> s2;
	if (s1.size() > s2.size())
		cout << s1 << endl;
	else{
		if (s1.size() < s2.size())
			cout << s2 << endl;
		else
			cout << "s1.size==s2.size" <<s1<< endl;

	}
		
	system("pause");
}
练习3.5
#include<iostream>
#include<string>

using namespace std;

int main()
{
	string s1,sum_s1;
	while (cin >> s1)
		sum_s1 += s1+" ";
	cout << sum_s1 << endl;
	system("pause");
}
3.6编写一段程序,使用范围for语句将字符串内所有字符用X替换。
#include<iostream>
#include<string>
using namespace std;

int main()
{
	string s1 = "fsdrfqewdfwrf";
	cout << s1 << endl;
	for (auto &c : s1)
		c = 'X';
	cout << s1 << endl;
	system("pause");
}
3.7、结果与3.6一样。

3.10编写一段程序,读入一个包含 标点符号的字符串,将标点符号取出后输出。
#include<iostream>
#include<string>
using namespace std;

int main()
{
	string s1,s2;
	cin >> s1;
	for (auto &c : s1)
	{
		if (!ispunct(c))
			s2 += c;
	
	}
	cout << s2 << endl;
	system("pause");
}

2.标准库类型vector
2.1.vector表示对象的集合,其中所有对象的类型都相同。
2.2.vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。
2.3.vector对象初始化.
默认初始化:vector<string>svec;//svec不含任何元素
值初始化:vector<string>svec(10);//10个元素,每个都初始化为0
vector<int>v1(10);//v1有10个元素。
vector<int>v1{10};//v1有一个元素。
vector<string>v1{10};//v1有10个元素。
2.4.若循环体内部包含有向vector对象添加元素的语句,则不能使用范围for语句。
2.5. vector对象的下标运算符可用于访问已存在的对象,不能用下标形式添加元素。
练习3.14
#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int>ivec;
	int num;
	while (cin >> num)
	{
		ivec.push_back(num);
	}
	for (auto i:ivec)
	cout << i <<endl;
	system("pause");
}
练习3.17
#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main()
{
	vector<string>ivec;
	string num;
	while (cin >> num)
	{
		ivec.push_back(num);
	}
	for (auto &i : ivec)
	{
		for (auto &j : i)
			j = toupper(j);

	}
	for (auto item : ivec)
		cout << item << endl;
	system("pause");
}
练习3.20
#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int>ivec;
	int num;
	while (cin >> num)
	{
		ivec.push_back(num);
	}
	for (int i = 0; i < ivec.size() - 1; ++i)
	{
		cout << ivec[i] + ivec[i + 1] << endl;
		++i;
	}
	system("pause");

3.迭代器

3.1、有迭代器的类型同时拥有返回迭代器的成员。
3.2、解引用迭代器可获得迭代器所指的对象。
3.3、箭头运算符把解引用和成员访问两个操作结合在一起。it->mem和(*it).men意思相同。
3.4、凡是使用了迭代器的循环体,都不要向迭代器所属容器添加元素。
练习3.21
<span style="font-size:14px;">#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int>ivec;
	int num;
	while (cin >> num)
	{
		ivec.push_back(num);
	}
	for (auto i=ivec.begin(); i!=ivec.end(); ++i)
		cout <<*i + *(++i) << endl;
	system("pause");
	}</span>

练习3.22
#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main()
{
	vector<string> text = {"sfqefegergqrgrrwgwqg qwrgqwgqwg wrgqwrgwqr rwg","","dwefwefwef ef ef"};
	for (auto it = text.begin(); it != text.end() && !(*it).empty(); ++it)
	{
		for (auto &item : *it)
			item = toupper(item);
		cout << *it << endl;
	}
	system("pause");
}

练习3.25
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<unsigned>scores(11, 0);
	unsigned grade;
	vector<unsigned>::iterator iter = scores.begin();
	while (cin >> grade)
	{
		if (grade <= 100)
			++*(iter + (grade / 10));
	}
	for (auto i : scores)
		cout << i << " ";
	system("pause");
}

4.数组
4.1、不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值。
4.2、使用数组下标时,通常将其定义为size_t类型。
4.3、使用数组名称可以看做指向数组首元素的指针。
4.4、使用范围for语句出了力多为数组时,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值