常规
1.基本输入输出:
一般用cin
型输入输出即可,主要包括一下几种类型:
int a; double a; float a; //一般需要用浮点数的变量直接用double就行
cin>>a;
cout<<a;
:(特殊的题目要求我们保留几位小数)
printf("%.3lf",a); //注:里面的.3是根据需要保留几位小数而写的,这里是保留3位小数
//------------------------------//
int a[n]; double a[n];
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cout<<a[i];
//------------------------------//
char a;
cin>>a;
cout<<a;
//------------------------------//
char a[n];
可以: for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cout<<a[i];
或者: cin>>a;
cout<<a;
//------------------------------//
char a[n];
cin.getline(a,n);
string a;
getline(cin,a);
2.特殊的输入输出:
在输入字符串时,cin
与getline
的关键区别:
cin:以空格或回车为结尾(不包含),但不读入空格或回车
getline:以回车为结尾(不包含),读入回车
下面来举几个例子:
string s1,s2;
cin>>s1>>s2;
cout<<s1<<endl<<s2<<endl;
输入:123
123
输出:123
123
string s1,s2;
cin>>s1;
getline(cin,s2);
cout<<s1<<endl<<s2<<endl;
输入:123
123
输出:123
//注:这里s2并不是没有读入,而是读入一个回车后就判断停了,所以s2实际上并没有读进去任何东西
string s1,s2;
cin>>s1;
getline(cin,s2);
cout<<s1<<endl<<s2<<endl;
输入:123 123
输出:123
123
//注:注意这里和第一个的区别,s2=“ 123”,多了一个空格
string s1,s2;
getline(cin,s1);
getline(cin,s2);
cout<<s1<<endl<<s2<<endl;
输入:123
123
输出:123
123
//注:常规
3.数字与字符相互转换:
int a; char c;
数字转字符:
c=a+'0';
字符转数字:
a=c-'0';
结构体
1.普通结构体:
//定义
struct node {
int a,b,c;
};
//创造结构体变量
node ak; node ak[n];
//调用结构体内变量
cin>>ak.a; cout<<ak.a;
cin>>ak[i].a; cout<<ak[i].a;
2.结合指针:
//申请结构体型指针
node * t;
//申请新的结构体型空间
t=new node;
//调用结构体指针变量
cin>>t->a; cout<<t->a;
指针
除定义链表,其他类型没见过考,这里主要讲指针与字符串的结合:
首先明确,我们定义:char a[n];
那么 a 本身就是一个指针,可以进行正常的指针型使用方法,例如:
a++; *a; *(a+1) 等
相反我们有了指针: char *a;
我们也能当做数组使用,例如:
cin>>a[1];
前提是已经申请好空间!
例如:
void work(char * s) {
int ans=0;
for(int i=0;s[i]!='\0';i++) {
if(s[i]>='0'&&s[i]<='9') ans++;
}
return ans;
}
int main() {
char c[110];
cin>>c;
work(c);
}
链表
常规的添加节点遍历节点就不再赘述,这里主要给一个删除特定节点的板子:
node *deletesushu(node *head)
{
/**********Program**********/
node * h=head,* las=NULL; // h:当前判断到的节点; las:上一个没有被删除的节点;
while(h) {
if(条件) { //如果要被删
if(las==NULL) head=h->next; //如果las不存在,说明h为头
else las->next=h->next; //反之h不是头
}
else { //如果不被删
las=h;//更新上一个没有被删除的节点
}
h=h->next; //遍历
}
return head;
/********** End **********/
}
文件
无非就是改变常规的输入输出形式,其他和普通题目一样,这里主要讲ifstream\ofstream
型文件输入输出:
申明:
ifstream filin("文件名",ios::in); // 文件输入
ofstream filout("文件名",ios::out); // 文件输出
注: filin 与 filout 可以随便改名字
输入输出:
int a; double a;
filin>>a;
filout<<a;
//------------------------//
char a[110];
filin>>a;
filout<<a;
值得庆幸的是,文件也满足getline的输入!!!
ifstream filin("文件名",ios::in); // 文件输入
char a[110];
filin.getline(a,110);
string s;
getline(filin,s);