您的位置:首页 > 编程语言 > C语言/C++

关于C++的标准库的相关内容

2017-01-18 10:38 423 查看

原文地址

STRING

#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
//当有字符出现后遇空白(空格符,换行符,制表符)便终止
//如输入”sdjajsd  1321weia“  输入的结果将只会为sdjajsd
cout<<s<<endl;
return 0;
}


string的empty()函数

string s;
while(getline(cin,s)){//每次都一行
if(!s.empty()){    //去掉空行
cout<<s<<endl;
}
}
return 0;


string的size()函数

string s;
while(getline(cin,s)){
if(s.size()>80){  //当一行中的字符超过80时才读出
cout<<s<<endl;
}
}
return 0;


切记字符串字面值与string是不同的类型

string类的输入运算符是遇到空白便停止,空白包括(空格,换行符,制表符)

而getline函数是读取一行,包括最后的换行符,然后去掉最后的换行符将所读内容赋值给string对象中

处理string对象中的字符

在c++中cctype头文件中定义了一组标准库函数处理这部分工作

常用的有:

isalunm(c)       //当c是字母或数字时为真
isalpha(c)       //当c是字母时为真
isdigit(c)       //当c是数字时为真
islower(c)       //若c为小写则返回真
isupper(c)       //若c为大写则返回真
tolower(c)       //将c变为小写
toupper(c)       //将C变为大写字母
isspace(c)       //当c是空白时为真
ispunct(c)       //当c是标点符号时为真


想处理每个字符,最好使用基于范围的for语句

for(declaration:expression)
statement


较为坑的是由于现在大学的几乎所有自带IDE都是VS2010,但是VS2010不支持基于范围的for语句,线程等。。。。。,若是你要去一些大学内部的考点的话,,咳咳,,那就跟我一样尴尬了。。。。囧。。

在这种情况下你要想全部遍历的话便只能用类似如下的代码。。

for(int i=0;i<s.size();++i){
char c=s[i];     //或类似string c=s.substr(i,1);
cout<<c<<endl;
}


所以这就很坑爹了,有一点其实我是真的不太明白,为什么到现在大学还都是用什么VC++6.0 VS2005 VS2010 这种已经早就几乎被所以程序员弃用的IDE。。。与时俱进多好,,哈哈,小小吐槽一下下,不喜勿喷

如果我们不需要处理每一个字符,要访问单个字符时,便可利用下标和迭代器

需要注意的是使用下标时要注意下标>=0且小于所要访问字符串的大小,若是越界,变可能发生不可预知的错误,所以我们也不能对空字符串进行下标访问

顺便提一句 decltype为返回相关类型,例如s.size()返回类型为string::size_type,是无符号整数

Vector

Vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,例如

vector vector<类> vector

原文地址

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 标准库 string vector