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