最大値と最小値の算術演算の結果を求める

2 人の 1 年生の子供が一緒にゲームをしています。Xiaoming は一連の正の整数と演算要件 (+、-、​​、/、%) を与えます。Xiaoli はこれらの整数の最大値と最小値を見つけたいと考えています。次に計算します。 Xiao Ming の要件に従った最大数と最小数の間の算術演算の結果。
入力:

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

出力:

最大数 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 桁だけなので、カンマ区切りを気にする必要はなく、レコードを 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