个人学习编程(3-04) 字符串专题

 字母统计:

从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间用若个空格隔开,英文单词由大小写字母组
成,编程完成以下任务:
1.统计并输出此句子中英文字母的个数;
2.统计并输出此句子中单词的个数;
3.查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)及次数。当出现最多的字母不止一个时,全部找
到,并输出找到的所有字母及次数。
(输出顺序按字母顺序,且输出时字母全部小写)

#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;

int main() {
	// This is An Pencil Case
	char arr[200] = {0};
	fgets(arr,200,stdin);
	int i = 0;
	bool isSpace = true;
	int wordCount = 0;
	int alphaCount  = 0;
	map<char,int> alphaMap;
	while(true){
		if(arr[i] == '\0' || arr[i] == '\n'){
			break;
		}
		else if(arr[i] == ' '){
			isSpace = true;
		}
		else{
			++alphaCount;
			if(isSpace){
				++wordCount;
			}
			if(arr[i] >= 'A' && arr[i] <= 'Z'){
				arr[i] += 32;
			}
			++alphaMap[arr[i]];
			isSpace = false;
		}
		++i;
	}
	printf("%d\n",alphaCount);
	printf("%d\n",wordCount);
	map<char,int>::iterator it;
	int maxTimes = 0;
	for(it = alphaMap.begin();it != alphaMap.end();++it){
		if(it->second > maxTimes){
			maxTimes = it->second;
		}
	}
	for(it = alphaMap.begin();it != alphaMap.end();++it){
		if(it->second == maxTimes){
			printf("%c ",it->first);
		}
	}
	
	printf("\n");
	printf("%d\n",maxTimes);
	
	return 0;
}

 浮点数加法:

描述
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2..Pi.Q1Q2..Qj对于整数部分
P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0
输入描述:
对于每组案例,每组测试数据占2行,分别是两个加数。
输出描述:
每组案例是n行,每组测试数据有一行输出是相应的和。输出保证一定是一个小数部分不为0的浮点数
示例1:
输入:0.111111111111111111111111111111
        0.111111111111111111111111111111
输出:0 222222222222222222222222222222

#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;

string GetInteger(string a){
	return a.substr(0,a.find('.'));
}

string GetFraction(string a){
	return a.substr(a.find('.')+1,a.size()-a.find('.'));
}

void FractionPlus(string& res,int& carry,string fa,string fb){
	int size = max(fa.size(),fb.size());
	while (fa.size()<size){
		fa.push_back('0');
	} 
	while (fb.size()<size){
		fb.push_back('0');
	} 
	res.resize(size);
	carry = 0;
	for(int i = size - 1; i>=0;--i){
		if(fa[i] + fb[i] + carry - '0' > '9'){
			res[i] = fa[i] + carry - '0' - 10;
			carry = 1;
		}
		else {
			res[i] = fa[i] + fb[i] + carry - '0';
			carry = 0;
		}
	}
}
void IntegerPlus(string& res,int carry,string ia, string ib){
	res.clear();
	for(int i = ia.size() - 1,j = ib.size() - 1;
	i >= 0 || j>= 0|| carry == 1;
	--i,--j){
		if(i >= 0 && j >=0){
			if(ia[i] + ib[j] +carry - '0' >'9'){
				res.insert(res.begin(),ia[i]+ib[j]+carry - '0' -10);
				carry = 1; 
			}
			else{
				res.insert(res.begin(),ia[i]+ib[j] + carry -'0');
				carry = 0;
			}
		}
		else if (i>=0 && j<0){
			if(ia[i] + carry >'9'){
				res.insert(res.begin(),ia[i]+ carry -10);
				carry = 1; 
			}
			else{
				res.insert(res.begin(),ia[i] + carry);
				carry = 0;
			}
		}
		else if (j>=0 && i<0){
			if(ib[i] +carry >'9'){
				res.insert(res.begin(),ib[i]+ carry -10);
				carry = 1; 
			}
			else{
				res.insert(res.begin(),ib[i] + carry);
				carry = 0;
			}
		}
		else{
			res.insert(res.begin(), '1');
			carry = 0;
		}
	}
}
int main() {
	char arra[1000] = { 0 };
	char arrb[1000] = { 0 };
	while(scanf("%s %s",arra,arrb)!= EOF){
		string a = arra;
		string b = arrb;
		
		string ia = GetInteger(a);
		string ib = GetInteger(b);
		string fa = GetFraction(a);
		string fb = GetFraction(b);
		
		string fres;
		int carry;
		FractionPlus(fres,carry,fa,fb);
		string ires;
		IntegerPlus(ires,carry,ia,ib);
		printf("%s.%s\n",ires.c_str(),fres.c_str());
	}
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值