string
string是一种自定义的类型,它可以方便地执行c-串所不能直接执行的一切操作。它处理的空间占用问题是自动的,需要多少,用多少,不像字符指针那样,提心吊胆于指针脱钩时的空间游离。它可以从c-串转换得到,还可以从内部“提炼”出c串........。string本身就是针对字符串操作来设计的。例如:
//-----------------------------------------------------------------------------------------
#include <iostream>
#include <algorithm>
using namespace std;
//------------------------------------------------------------------------------------------
int main()
{
string a,s1="Hello ";//Hello后面有一空格
string s2="123";
a=s1; //复制
cout<<(a==s1?" ":"not")<<"equal"<<endl; //比较
cout<<a+s2<<endl; //连接
reverse(a.begin(),a.end()); //倒置串
cout<<a<<endl;
cout<<a.replace(0,9,9,'c'); //设置
cout<<(s1.find("ell")!=-1?" ":"not")<<"found/n"; //查找串
cout<<(s1.find('c')!=-1?" ":"not")<<"found/n"; //查找字符
} //================================================
运行结果:
equal
Hello 123
321 olleH
ccccccccc
found
not found
string还有其它的操作,如搜索操作、插入操作、取长度、删除字符、删除字串、判断空串等。
string与c-串的输入与输出(string&C-string I/O)
(1)循环读入单词操作将内容送到变量中,直到读不到数据(缓冲区读完,并且没有数据接续,则流状态变成false)
for(string s;cin>>s;)
cout<<s<<" ";
cout<<endl;
或者
for(char a[10];cin>>a;)
cout<<a<<" ";
cout<<endl;
(2)通过getline将其一次性输入:
string s;
getline(cin,s);
cout<<s<<endl;
或者
char a[40];
cin.getline(a,40);
cout<<a<<endl;
string流(string streams)
如果有一个文件aaa.txt,有若干行,不知道每行有几个整数,要编程输出每行的整数和,该怎么实现?
aaa.txt内容:
12 3 45 67 8 9
56 523 45 65
45 24 42 2
45
4242 2464
//================================================
//整行读入再分解读入
//================================================
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
//-----------------------------------------------------------------------------------
int main()
{
ifstream in("aaa.txt");
if(!in)
{
cout<<"error"<<endl;
return 0;
}
for(string s;getline(in,s);)
{
int a,sum=0;
for(istringstream sin(s);sin>>a;sum+=a);
cout<<sum<<endl;
}
}
//==============================================
istringstream是输入string流,它在sstream头文件中说明。该语句类似文件流操作 ,只不过创建sin流时,其参数为string对象。它是将string的实体看作是一个输入流,因而,sin>>a即是从string流输入整数到a中,一直输到最后一个整数
getline函数的返回是流状态,通过其可以判断文件是否还有数据可读。
向量(vectors)
1、基本操作
定义方式:
(1)vector <int>a(10); //定义10个整数元素的向量,但没有给出初值,其值是不确定
(2)vector <int>b(10,1); //定义10个int的向量,初值为1
(3)vector <int>c(b); //用现成的向量来创建一个向量
(4)vector <int>d(b.begin(),b.begin()+3); //定义其值为b向量中第0个到第2个(共3个)元素的向量
(5)int a[7]={1,2,5,3,7,9,8};
vector<int>va(a, a+7);
向量遍历的循环控制
for(int i=0;i<a.size();i++)
cout<<a[i]<<" ";
for(vector<int>::iterator it=a.begin();it!=a.end();++it)
cout<<*it<<" ";
常用操作:
a.assign(b.begin(),b,begin()+3); //b向量的0~2的元素构成向量赋给a
a.assign(4,2); //使a向量只含0~3,且赋为值2
int x=a.back(); //将a的最后一个向量元素赋给整数变量x
if(a.empty()) cout<<“empty”; //判断向量是否为空
int y= a.front(); //将a的第一个向量元素值赋给整数变量y
a.pop_back(); //删除a向量的最后一个元素
a.push_back(5); //在a向量最后插入一个元素,其值为5
a.resize(10); //将向量元素个数调到10个。多则删,少则补,其值随机
a.resize(10,2); //将向量元素个数调到10个。多则删,少则补,其值为2
if(a==b) cout<<"equal"; //判断向量是否相等,比较操作还有!=,<,>,<=.>=
除此之外,还有元素插入与删除、保留元素个数、容量观察等操作
string是一种自定义的类型,它可以方便地执行c-串所不能直接执行的一切操作。它处理的空间占用问题是自动的,需要多少,用多少,不像字符指针那样,提心吊胆于指针脱钩时的空间游离。它可以从c-串转换得到,还可以从内部“提炼”出c串........。string本身就是针对字符串操作来设计的。例如:
//-----------------------------------------------------------------------------------------
#include <iostream>
#include <algorithm>
using namespace std;
//------------------------------------------------------------------------------------------
int main()
{
string a,s1="Hello ";//Hello后面有一空格
string s2="123";
a=s1; //复制
cout<<(a==s1?" ":"not")<<"equal"<<endl; //比较
cout<<a+s2<<endl; //连接
reverse(a.begin(),a.end()); //倒置串
cout<<a<<endl;
cout<<a.replace(0,9,9,'c'); //设置
cout<<(s1.find("ell")!=-1?" ":"not")<<"found/n"; //查找串
cout<<(s1.find('c')!=-1?" ":"not")<<"found/n"; //查找字符
} //================================================
运行结果:
equal
Hello 123
321 olleH
ccccccccc
found
not found
string还有其它的操作,如搜索操作、插入操作、取长度、删除字符、删除字串、判断空串等。
string与c-串的输入与输出(string&C-string I/O)
(1)循环读入单词操作将内容送到变量中,直到读不到数据(缓冲区读完,并且没有数据接续,则流状态变成false)
for(string s;cin>>s;)
cout<<s<<" ";
cout<<endl;
或者
for(char a[10];cin>>a;)
cout<<a<<" ";
cout<<endl;
(2)通过getline将其一次性输入:
string s;
getline(cin,s);
cout<<s<<endl;
或者
char a[40];
cin.getline(a,40);
cout<<a<<endl;
string流(string streams)
如果有一个文件aaa.txt,有若干行,不知道每行有几个整数,要编程输出每行的整数和,该怎么实现?
aaa.txt内容:
12 3 45 67 8 9
56 523 45 65
45 24 42 2
45
4242 2464
//================================================
//整行读入再分解读入
//================================================
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
//-----------------------------------------------------------------------------------
int main()
{
ifstream in("aaa.txt");
if(!in)
{
cout<<"error"<<endl;
return 0;
}
for(string s;getline(in,s);)
{
int a,sum=0;
for(istringstream sin(s);sin>>a;sum+=a);
cout<<sum<<endl;
}
}
//==============================================
istringstream是输入string流,它在sstream头文件中说明。该语句类似文件流操作 ,只不过创建sin流时,其参数为string对象。它是将string的实体看作是一个输入流,因而,sin>>a即是从string流输入整数到a中,一直输到最后一个整数
getline函数的返回是流状态,通过其可以判断文件是否还有数据可读。
向量(vectors)
1、基本操作
定义方式:
(1)vector <int>a(10); //定义10个整数元素的向量,但没有给出初值,其值是不确定
(2)vector <int>b(10,1); //定义10个int的向量,初值为1
(3)vector <int>c(b); //用现成的向量来创建一个向量
(4)vector <int>d(b.begin(),b.begin()+3); //定义其值为b向量中第0个到第2个(共3个)元素的向量
(5)int a[7]={1,2,5,3,7,9,8};
vector<int>va(a, a+7);
向量遍历的循环控制
for(int i=0;i<a.size();i++)
cout<<a[i]<<" ";
for(vector<int>::iterator it=a.begin();it!=a.end();++it)
cout<<*it<<" ";
常用操作:
a.assign(b.begin(),b,begin()+3); //b向量的0~2的元素构成向量赋给a
a.assign(4,2); //使a向量只含0~3,且赋为值2
int x=a.back(); //将a的最后一个向量元素赋给整数变量x
if(a.empty()) cout<<“empty”; //判断向量是否为空
int y= a.front(); //将a的第一个向量元素值赋给整数变量y
a.pop_back(); //删除a向量的最后一个元素
a.push_back(5); //在a向量最后插入一个元素,其值为5
a.resize(10); //将向量元素个数调到10个。多则删,少则补,其值随机
a.resize(10,2); //将向量元素个数调到10个。多则删,少则补,其值为2
if(a==b) cout<<"equal"; //判断向量是否相等,比较操作还有!=,<,>,<=.>=
除此之外,还有元素插入与删除、保留元素个数、容量观察等操作