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;
} 

C++再学习——《C++ primer》(一)几个小知识点的总结如果是需要统计字符串中每个字母出现的字数,那么就先用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()函数

此处提供的范例只能对顺序出现的字符或数字进行统计。如果字符出现的位置与顺序随机,则每次比较都需要遍历一次字符串或整个数组。