- 5.21
/*输入单词,直到前后输入了两个相同的单词为止,找到的单词必须以大写开头*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
string buf,bref;
while(cin>>buf&&!buf.empty())
{
if(!isupper(buf[0]))
continue;
if(buf==bref)
{
cout<<buf<<"\t"<<"occurs twice in succession"<<endl;
break;
}
bref=buf;
}
if(cin.eof())
cout<<"no"<<endl;
return 0;
}
2.5.6.3关于异常
这段程序写的时候是参考书上的程序,自己写还写不出来
/*编写一段程序,从标准输入读取两个整数,输出第一个数除以第二个数的结果,修改程序用try捕获异常,
catch子句应该为用户输出一条提示信息,询问是否输入新数并且重新执行try语句块的内容*/
#include<iostream>
using namespace std;
int main()
{
int i1,i2;
while(cin>>i1>>i2)
{
try{
if(i2==0)
throw runtime_error("data can not be 0");
//不用else,因为只要没有执行if就执行这句,执行if函数终止
cout<<static_cast<double>(i1/i2)<<endl;//输出转换成double型
}catch(runtime_error err)
{
cout<< err.what()
<<"\nTry again? yes or no"<<endl;
char c;
cin>>c;
if(!cin||c=='n')
break;//cin这种用法还不太明白
}
}
return 0;
}
3.5.4.2
/*假设有两个包含整数的vecor对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀
,对于两个不等长的vector对象,挑出比较短的那个,把它的所有元素和另一个vector对象比较。
*/
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int iv1,iv2;
vector<int> ivec1;
vector<int> ivec2;
cout<<"enter the first!"<<endl;
while(cin>>iv1)
ivec1.push_back(iv1);
cout<<"enter the second"<<endl;
cin.clear();//否则将跳过第二个while
while(cin>>iv2)
ivec2.push_back(iv2);
if(ivec1.size()!=ivec2.size())
{
int tag=0;//设置的这个标签必须要初始化为0,否则在进行是前缀测试的时候不能运行,定义于函数体内的为初始化的内置类型将为未定义,引发错误,因此内置类型必须初始化;
for(auto p1=ivec1.begin(),p2=ivec2.begin();p1!=ivec1.end()&&p2!=ivec2.end();++p1,++p2)
if(*p1!=*p2)
{
tag=1;
cout<<"is not"<<endl;
break;
}
if(tag==0)
cout<<"is qianzhui"<<endl;
}
else
cout<<"is not"<<endl;
return 0;
}
“`