C++再学习——《C++ primer》(一)几个小知识点的总结
1、在预先不知道要对多少个用户输入进行操作时,一般会采用循环来做,但是循环条件除了另外设置循环控制变量之外,还可以直接用户输入循环结束标记。
#include<iostream>
using namespace std;
int main(){
int sum=0,value=0;
cout<<"开始输入数据,输入Ctrl+Z+Enter结束输入"
while(cin>>value) //从标准输入流中读取数据,保存到value中。循环条件实际上检测的是std:cin
sum+=vlaue;
cout<<"sum is :"<<sum<<endl;
return 0;
}
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效的输入时(与value类型不符时),istream对象的状态就会变为无效。处于无效状态的istream对象会使条件变为假。
2统计输入的每个值出现的次数
统计某个输入值出现的次数这样的问题,在初学C++时经常能遇见,今天稍微整理一下。
此处以整数为例
#include<iostream>
using namespace std;
int main(){
int value;//记录剩下的数
int sum=0;
int comp=0;//记录正在统计的数
cout<<"请输入数据,结尾标志位Ctrl+z+Enter"<<endl;
//读取第一个数,保证确实有数据可以处理
if(cin>>comp){
int cnt=1;//计数,保存正在处理的当前值的个数
while(cin>>value){ //读取剩余的数
if(value==comp)
cnt++;
else{
cout<<comp<<"出现了"<<cnt<<"次"<<endl;
comp=value;
cnt=1;//给计数器重新设值
}
} //循环while结束
cout<<comp<<"出现了"<<cnt<<"次"<<endl; //打印输入的最后一个值
}
return 0;
}
如果是需要统计字符串中每个字母出现的字数,那么就先用substr()函数提取字符,使用之前要在文件开头包含头文件
stringObject.substr(start,length):从start处开始取长度为length的字符子串
这里可以设置一个变量i,初始化为零。substr(i,1)
string str1,str2;//str2用于存放取出来的字符
string str3;//用于存放之后取出的字符
int count=1;
int i=1;
cout<<"输入一个字符串a~z"<<endl;
cin>>str1;
str2=str1.substr(0,1);
while(i<str1.length())
{
str3=str1.substr(i,1);
if(str2.compare(str3)==0)
{
count++;
i++;
}
else{
cout<<str2<<"出现了"<<count<<"次"<<endl;
str2=str3;
count=1;//给计数器重新设值
i++;
}
}
cout<<str2<<"出现了"<<count<<"次"<<endl;
需要注意的是,C++中没有substring()函数,这是java里的。C++中头文件中只有substr(start,length)函数。比较字符串时,也是有stringObject.compare(stringObject2).
获取字符串长度则是.length()函数
此处提供的范例只能对顺序出现的字符或数字进行统计。如果字符出现的位置与顺序随机,则每次比较都需要遍历一次字符串或整个数组。