原文地址
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