1、输入任意 4 个字符(如:abcd),并按反序输出(如:dcba)。
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
cout<<"请输入四个字符"<<endl;
cin>>a;
cout<<"结果是:"<<endl;
for(int i=3;i>=0;i--){
cout<<a[i];
}
return 0;
}
注意点:string在头文件#include<string>中 ,而不是异想天开的使用#include<cstring>,在上篇中谈过,使用C语言中的标准库的时候,我们可以不写.h,而采用前面加c的方式引入C语言的头文件。
2、设 a、b、c 均是 0 到 9 之间的数字,abc、bcc 是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c 的值。
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
cout<<"满足条件的 abc 为:"<<endl;
for(a=0; a<10; a++)
for(b=0; b<10; b++)
for(c=0; c<10; c++)
if(((a*100+b*10+c)+(b*100+c*10+c))==532)
cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;
return 0;
}
3、一个数如果恰好等于它的各因子(该数本身除外)子和,如: 6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。求出 2 到 60 之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei 为完数) G: g1 g2 g3 ......(gi 为盈数) 。
#include<iostream>
#include<string>
using namespace std;
int main(){
int wan[60],yin[60],index1=0, index2=0;
for(int i=2;i<=60;i++){
int total=0;
for(int j=i-1;j>0;j--){
if(i%j==0)
total+=j;
}
if(total==i){
wan[index1]=i;
index1++;
}else if(total>i){//还有种情况total<i
yin[index2]=i;
index2++;
}
}
cout<<"E:";
for(int i=0;i<index1;i++){
cout<<wan[i]<<" ";
}
cout<<"G:";
for(int i=0;i<index2;i++){
cout<<yin[i]<<" ";
}
return 0;
}
注意点:使用if-else情况要考虑全
这里我用数组存储了,比较浪费空间,原文(地址)中没有浪费,可以参考看看。
4、从键盘输入 4 个学生的数据( 包括姓名、年龄和成绩),并存放在文件 sf1 上。从该文件读出这些数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。
这里涉及文件操作,我们可以学习一下:
首先,要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream>。
fstream,它定义了三个新的数据类型:
数据类型 | 描述 |
---|---|
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
打开文件
ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。
下面是 open() 函数的标准语法,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。
void open(const char *filename, ios::openmode mode);
在这里,open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。
模式标志 | 描述 |
---|---|
ios::app | 追加模式。所有写入都追加到文件末尾。(append) |
ios::ate | 文件打开后定位到文件末尾。 |
ios::in | 打开文件用于读取。(标准流的输入,即读取) |
ios::out | 打开文件用于写入。(标准流的输出,即写入) |
ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
您可以把以上两种或两种以上的模式结合使用。例如,如果您想要以写入模式打开文件,并希望截断文件,以防文件已存在,那么您可以使用下面的语法:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
类似地,您如果想要打开一个文件用于读写,可以使用下面的语法:
ifstream afile;
afile.open("file.dat", ios::out | ios::in );
写入文件
在 C++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 cout 对象。
读取文件
在 C++ 编程中,我们使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstream 或 fstream 对象,而不是 cin 对象。
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct student{
string name;
int age;
int grade;
}student;
bool cmp(student a, student b){
if(a.grade==b.grade){
return a.name>b.name;//降序 <是升序
}else return a.grade>b.grade;
}
int main(){
vector<student> stu;
student s;
cout<<"请输入学生信息(姓名 年龄 成绩),'00 00 00'结束输入,如:\n'张三 24 67'\n'李四 34 98'"<<endl;
ofstream out("sf1.txt");
while(cin>>s.name>>s.age>>s.grade){
if(s.name=="00" or s.age==00 or s.grade==00)
break;
out<<s.name<<" "<<s.age<<" "<<s.grade<<endl;
}
out.close();
ifstream in("sf1.txt");
while(!in.eof()){
in>>s.name>>s.age>>s.grade;
if(in.fail()) //不加入这个,会多取一次数据 fail()用来判断一个流是否“坏”掉了。
//如果failbit、badbit中任意一种或两种被设置,则fail()返回true,否则返回false。
break;
stu.push_back(s);
}
cout<<"成绩排序如下:"<<endl;
sort(stu.begin(), stu.end(), cmp);
vector<student>::iterator i;//申请一个学生容器的迭代器
for(i=stu.begin();i!=stu.end();i++)//写法i!=stu.end()
cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grade<<endl;//迭代器i,是地址,取数据是*i得到的是student对象
in.close();
cout<<"成绩次高者的数据如下:"<<endl;
i = stu.begin()+1;
cout<<(*i).name<<" "<<(*i).age<<" "<<(*i).grade<<endl;
return 0;
}
原文:地址
作者:无涯明月