这个星期接触了挺多新鲜的东西,C++语言
虽然只了解一点
知道了头文件和C的区别
(还了解了一点新的算法)
C++用
“#include
using namespace std;“
这个还是挺难记的,多用几次就能熟练了
C++有自己的输入输出格式
从百度上找到的总结一下(带上别人的一点经验)就是这样:
1.cout代表C++的输出流,与“<<”一起使用
2.cin代表输入流,与“>>”一起使用
(输入的时候也要注意双引号单引号的使用)
回车可以用\n 也可以用endl
#include <iostream>
using namespace std;
int main(){
int a;
cin>>a;//从键盘上取值赋给a
cout<<a<<"\n";//输出a换行
cout<<a<<endl;//输出a换行
}
cin和cout属于C++的概念,调用时涉及输入输出流,而scanf和printf属于C的概念,是C语言的标准输入/输出库中的函数,所以在时效上,scanf和printf优于cin、cout,对于大数据的输入输出,通常情况下应该用scanf、printf。
(这里借用了别人的经验,有点官方的赶脚)
cin和cout能够自动识别变量的数据类型,因此,在进行输入输出时,不需要指定数据类型,printf和scanf函数在输入输出时需指定数据类型。(确实方便,但该记的还是要去记)
下面是字符的处理
(一)
要用到这个头文件
①
中间不能有空格的字符串串
#include <iostream>//字符串的输入输出
#include <string>//要用到这个头文件
using namespace std;
int main(){
string s;//定义
cin>>s;//cin在遇到空格符(重点!!)或回车符时会认为字符串已经结束
cout<<s;
}
②
一个平平无奇的字符串串
- getline() 接收一个字符串,可以接收空格并输出
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
getline(cin,a);
cout<<a<<endl;
}
字符数组哟
2. gets() 接受一个字符数组,可以接收空格并输出(这两者都可以接收空格,但是遇到回车会结束)
#include <iostream>
#include <string>
using namespace std;
int main(){
char a[100];
gets(a);
cout<<a<<endl;
}
(二)
不用额外的头文件
可以用cin.getline()和cin.get()处理字符串
cin.getline()
该函数有两个参数。第一个参数是用来储存输入行的数组名称,第二个参数是要读取的字符数
cin.getline(要赋值的数组名称a,读取的字符数n);
#include <iostream>
using namespace std;
int main(){
char a[100];
cin.getline(a,20);//只读取19个字符!!!注意格式
cout<<a<<endl;
}
此二者与cin>>的区别:这两种输入方式只会在遇到回车符时认为字符串结束,在遇到空格符时还会继续读取空格后面的字符。
cin>>遇到空格、TAB和回车都会停止读入,并且会保留
cin.getline();在遇到回车符时,结束字符串输入并丢弃回车符。
cin.get();在遇到回车符时,则会保留回车符在输入队列。并且没有说一定参数
这就是说如果同时用两个cin.get()就会出问题,只能读取到第一次输入。因为捏,第一个get输入结束之后会保留下回车,然后这个回车又被下一个get读取了,而get读到回车就会结束
直接结束,没有故事了,所以你确定还要连续使用两个cin.get()吗???
需要注意的是
cin.get();有两种
1.cin.get(字符变量名)
2.cin.get(字符变量名,读入的字符数量)类似cin.line()也只会读取n-1个数据
第一种只能吸收一个字符,第二种用来接收一行字符串,可以接收空格。
看到这里,有没有一点想法?可以用cin.get()吸收掉末尾的换行符,这样就可以用两个cin.get()啦。
就像酱紫
cin.get(name,10);
cin.get();
cin.get(blog,10);
两个不行再来一个咯
呼,今天的博客到此结束,第一次写有点慌张,有点乱七八糟
2021-5-25来补充一下(发现自己还有一点懵)
题目是
#include <iostream>
#define MAX 1100
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
int main(){
char a[MAX];
int t,sum;
cin>>t;//这里留下了一个回车
getchar();///不加这个的话回车会被下面的gets()读入从而终止后续的字符读入(把gets改成scanf也是一样)
while(t--){
sum=0;
gets(a);
for(int i=0;a[i]!='\0';i++){
if(a[i]<0)//汉字编码的两个字节最高位是1,可以认为小于0就是汉字
sum++;
}
cout<<sum/2<<endl;//汉字占两个字节所以除二
}
return 0;
}