两个一年级小朋友在一起玩游戏,小明给出一堆一位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:
用逗号分隔的一位正整数序列,及其运算符和等号
输出:
最大数 op 最小数=结果
例如输入:5,1,1,2,0,3,+,=输出:5+0=5
#include <stdio.h>
#include <string.h>
#include<vector>
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
string text;
cin>>text;
int N = text.length();
char str[N];
strcpy(str,text.data());
char seg[] = ","; /*分隔符这里为逗号comma,分隔符可以为你指定的,如分号,空格等*/
int i =0;
char *substr= strtok(str, seg);/*利用现成的分割函数,substr为分割出来的子字符串*/
vector<string>v_s;
while (substr != NULL) {
i++;
v_s.push_back(substr);
// printf("%s\n", substr);
substr = strtok(NULL,seg);/*在第一次调用时,strtok()必需给予参数str字符串,
往后的调用则将参数str设置成NULL。每次调用成功则返回被分割出片段的指针。*/
}
vector<int>v;
vector<string>v_s2;
string os = "";
for(int j=0;j<i;j++){
if(v_s[j].length()==1){
v_s2.push_back(v_s[j]);
}
if((v_s[j]=="+")||(v_s[j]=="-")||(v_s[j]=="*")||(v_s[j]=="/")||(v_s[j]=="%")){
os = v_s[j];
}
}
for(vector<string>::iterator it=v_s2.begin(); it!=v_s2.end()-1; it++){
if(*it=="0"||*it=="1"||*it=="2"||*it=="3"||*it=="4"||*it=="5"||*it=="6"||*it=="7"||*it=="8"||*it=="9"){
int num = stoi(*it);
v.push_back(num);
}
}
auto biggest = max_element(v.begin(), v.end());
auto smallest = min_element(v.begin(), v.end());
int max = *biggest;
int min = *smallest;
if(os=="+"){
cout<<max<<os<<min<<"="<<max+min;
}
if(os=="-"){
cout<<max<<os<<min<<"="<<max-min;
}
if(os=="*"){
cout<<max<<os<<min<<"="<<max*min;
}
if(os=="/"){
cout<<max<<os<<min<<"="<<max/min;
}
if(os=="%"){
cout<<max<<os<<min<<"="<<max%min;
}
return 0;
}
这种做法有些复杂了。老老实实按着题意用,分隔文本,再对分隔的部分进行处理。
因为其实数字的最大位数也就1位,不用管什么逗号分隔,直接一个个读取记录就行。
所以更简单的实现如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char o;
int i,n,max,min;
char max_c='0',min_c='9';
gets(a);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
if(a[i]>max_c) max_c=a[i];
if(a[i]<min_c) min_c=a[i];
}
if(a[i]=='/'||a[i]=='-'||a[i]=='+'||a[i]=='*')
o=a[i];
}
max=max_c-'0';
min=min_c-'0';
switch(o)
{
case '+':printf("%d+%d=%d",max,min,max+min); break;
case '*':printf("%d*%d=%d",max,min,max*min); break;
case '-':printf("%d-%d=%d",max,min,max-min); break;
case '/':printf("%d/%d=%d",max,min,max/min); break;
}
return 0;
}