//标准库string类型
//string的头文件: #include<string>
//string的定义及初始化:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
//string s1; //默认以构造函数,s1为空串
//string s2(s1); //将s2初始化,s2是s1的副本
//string s3("hello,world"); //将s3初始化为一个字符串字面值常量
//string s4(n,"c") //将s4初始化为字符'c'的n个副本
//注意:一定要区分字符串字面值和string数据类型的使用
int main(void)
{
//string 对象的读写
string s1, s2;
cin >> s1 >> s2; //以cin的形式读写的话
/*
读取并忽略开头所有的空白字符(如空格,换行符,制表符)
读取字符直至再次遇到空白字符,读取终止
*/
cout << s1 << s2 << endl;
//用getline的读取方式读取文本
/*
读取并忽略开头所有的空白字符(如空格,换行符,制表符)
读取字符直至再次遇到换行符
*/
string line;
while (getline(cin, line))
cout << line << endl;
/*
在此插入一个小插曲有关迭代器的了解
迭代器的定义: 迭代器是一种检查容器(容器特性: 一个容器内所有的对象都必须是同一种类型)内元素并遍历元素的数据类型
每个容器都自己定义了iterator类型
迭代器的begin和end操作
迭代器的使用:
vector<string>::iterator 变量名(iter)
执行操作:
for(vector<string>::iterator iter = s1.begin();iter != s1.end(); ++iter)
*iter = 0;
vector<string>::const_iterator 与 const vector<string>::iterator 的区别(这里只是举个例子)
for(vector<string>::const_iterator iter = s1.begin();iter != s1.end(); ++ iter)
*iter = ' ' 非法操作,不能修改与其相关的内容,但可以修改iter的直向
for(const vector<string>::iterator iter = s1.begin();iter != s1.end(); ++ iter(这是非法操作))
*iter = ' '; 正确
看完这些那就想一想const vector<string>::const_iterator的情况
迭代器算术操作
iter + n; 指针位置移动,指向的地址改变
iter1-iter2; 必须是指向同种类型的指针,相减表示其距离或者个数,其类型是difference_type或者size_type
当然以上所说的只是长长见识,其实每个容器里都已经定义好了迭代器的类型,你只要拿出来用就可以了
*/
//string 对象的基本操作
/*s1.empty() 如果为空的话,返回true,否则返回false
s1.size() 返回s中字符的个数
s1[n] 返回位置为n的字符,位置从0开始
s1 + s2 把s1与s2连接起来成为一个新的字符串,返回新生成的字符串
s1 = s2; 把s2赋给s1
s1 == s2; 比较s1与s2的内容(字符的ASCLL 码值的比较),相等返回true,否则返回false
!= ,< , <= 保持惯有的含义
> 和 >=
*/
//string 的size和empty操作
//注意size返回的类型是无符号整型
string::size_type len = s1.size();
if (s1.empty())
cout << "s1 字符串是空的!" << endl;
//关系运算的操作
if (s1 == s2)
cout << "s1 = s2";
else if (s1 < s2)
cout << "s1 < s2";
else
cout << "s1 > s2";
cout << s1 << endl;
cout << s2 << endl;
s1 = s2;
cout << "s1 + s2 = " << s1 + s2 << endl;
//和字符串字面值的连接
s1 = "hello";
s2 = "world";
string s3 = s2 + ","; //正确
string s4 = "hello" + ","; //明显错误
string s5 = s1 + "," + "world"; //正确 (s1 + ",")+"world"
string s6 = "hello" + "," + s2; //错误,("hello" + ",")+s2
//下标操作
string::iterator index;
for (index = s1.begin();index != s1.end(); ++index)
*(s1+index) = 'c'; //向当于s1[index]
//string 的字符处理
/*
isalnum(c); 如果c是字母或者数字,则为true
isalpha(c); 如果是字母,则为true
iscntrl(c); 如果是控制字符,则为true
isdigit(c); 如果是数字,则为true
isgraph(c); 如果c不是空格,但可打印,则为true
islower(c); 如果是小写字母,则为true
isprint(c); 如果是可打印的字符,则为true
ispunct(c); 如果是标点符号,则为true
isspace(c); 如果是空白字符,则为true
isupper(c); 如果c是大写字母,则为true
isxdigit(c); 如果c是十六进制数,则为true
tolower(c); 如果是大写字母,则返回其小写字母的形式,否则直接返回c
toupper(c); 如果是小写字母, 则返回其大写字母的形式,否则直接返回c
*/
return 0;
}
标准库类型string
最新推荐文章于 2024-04-04 19:53:37 发布