找最大数与最小数进行算术运算的结果

两个一年级小朋友在一起玩游戏,小明给出一堆一位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:

用逗号分隔的一位正整数序列,及其运算符和等号

输出:

最大数 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;
}

猜你喜欢

转载自blog.csdn.net/m0_46368082/article/details/110296201