HuaWei-面试题Traing-02

  1. 字符串排序:
    编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。
其具体实现代码如下:

#include<iostream>
#include<vector>
#include<string>

using namespace std;

string fun(string str)
{
    vector<char> vv;   
        for(int i =0;i<26;i++ )
        {
            for(int j = 0;j<str.size();j++)
            {            
                    if(str[j] - 'a' == i || str[j] -'A' == i)
                    {
                        vv.push_back(str[j]);
                    }                
            }
        }
        for(int i=0,j=0;(i<str.size()) && (j<vv.size());i++)
        {
            if(str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z')
                {
                   str[i] = vv[j++];
                }
        }      
      return str;       
}
 
int main()
{
    string ss;
    while(cin>>ss)
    {
     cout<<fun(ss)<<endl;   
    }    
    return 0;
}

如,输入: By?e 输出: Be?y

  1. 字符串分割: 连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
    首先输入一个整数n,为要输入的字符串个数。然后输入n个字符串;
    其具体实现代码如下:
#include<iostream>
#include<string>

using namespace std;

int main()
{
    int num;
    while(cin>>num)
    {
      while(num--)
      {
       string str;
       cin>>str;
	      while(str.size()>8)  
          {                      
            cout<<str.substr(0,8)<<endl;
            str = str.substr(8);          
          }          
          while(str.size() > 0 && str.size() < 8)
         {
            str += '0';   
         }   
           cout<<str<<endl;	         
     	}	      
    }    
}
  1. 字符串匹配:分别先后输入一个短字符串和一个长字符串,判断短字符串中的所有字符是否在长字符串中全部出现,返回结果为true或false;
    其具体实现代码如下:
#include<iostream>
#include<string>
#include<map>

using namespace std;
 
int main()
{
    string str1,str2,rst;       
     while(cin>>str1>>str2)
     {         
        if(str1.size()<=str2.size())
        {          
          map<char,int> mp; 
          rst = "true";
          for(int i = 0;i<str2.size();i++)
          {
            mp[str2[i]]=1;
          }
           for(int j= 0;j<str1.size();j++)
           {
              if(mp[str1[j]] != 1)
              {
                  rst = "false";  
                  break;
              }             
          }           
        }
         else
         {
             rst = "false";
              break;
         }         
		  cout<<rst<<endl;                            
     }      
    return 0;
}
  1. 统计大写字母:输入一个String数据,找出给定字符串中大写字符(即’A’-‘Z’)的个数
    其具体实现代码如下:
#include<iostream>
#include<string>

using namespace std;

int main()
{
  string str;
  while(cin>>str)
  {
    int sum = 0;   
    for(int i=0;i<str.size();i++)
    {
       
        if(str[i]-'A' >=0 && str[i]-'A' <=25)
       {
           sum = sum+1;
       }
    }
     cout<<sum<<endl;  
  }       
    return 0;
}

  1. 删除字符串中出现次数最少的字符:实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
    注意每个输入文件有多组输入,即多个字符串用回车隔开;
    其具体实现代码如下:
#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

string fun(string str)
{
   string left_str;   
   int account[26]={0}; 
   int min = 1000;   
      for(int i=0;i<str.size();i++)   //将输入字符串中是小写字母的字符找出
      {
          if(str[i]-'a'>=0 && str[i]-'a'<=25)
          {
             account[str[i]-'a']++;  
          }         
      } 
     for(int i=0;i<26;i++)   //找出出现次数最少的字符
     {
         if(account[i]<min && account[i] !=0)
         {
             min = account[i];
         }
     }
    for(int i=0;i<str.size();i++)  //将输入字符串中出现次数最少的字符踢出,将余下的字符按输入时顺序输出
    {
        if(account[str[i]-'a']>min)
        {
            left_str+=str[i];
        }
    }
       return left_str;    
   }     
int main()
{
   string ss;
   while(cin>>ss)
   {
       cout<<fun(ss)<<endl;
   }
    return 0;
}
  1. 在字符串中找出连续最长的数字串:输入一个字符串,输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不间隔),但是长度还是一串的长度,与数字字符串间用逗号间隔。
    其具体实现代码如下:
    c++编程实现:
#include<iostream>
#include<string>
using namespace std;

int main()
{
  string str;
  while(cin>>str)
  {
      if(str == "") 
  {cout<<" "<<endl;}    
  else
  {
   int i=0,j=0,max=0,num=0;
   int len = str.size();
    for(i=0;i<len;i++)
    {
       if(str[i]-'0'>=0 && str[i]-'0'<=9) num++;
       else num = 0;
       if(num > max) max = num;      
    }
     if(max == 0) cout<<" "<<endl;
      num = 0;
    for(i=0;i<len;i++)
    {
       if(str[i]-'0'>=0 && str[i]-'0'<=9) num++;
       else num = 0;
       if(num == max)
       {
           for(j = i-max+1;j<=i;j++) 
		   {
		   	cout<<str[j];
		   }
       }
    }      
    cout<<","<<max<<endl;           
    }  
  }
    return 0;
}

c语言编程实现:

#include<stdio.h>
#include<string.h>

int main(void)
{
   char cc[1000];
   while(scanf("%s",cc) != EOF)
   {
     int i=0,j=0,max=0,num = 0;
     int len = strlen(cc);
       for(int i=0;i<len;i++)
     {
         if(cc[i] >= '0' && cc[i] <= '9')num++;
           else num = 0;
           if(num>max)
           {
               max = num;
           }          
     }
       num = 0;
        for(int i=0;i<len;i++)
        {
          if(cc[i] >= '0' && cc[i] <= '9')num++;       
          else num = 0;
          if(num == max)        
             for(j=i-max+1;j<=i;j++) printf("%c",cc[j]);                       
        }
       printf(",%d\n",max);           
   }    
    return 0;
}
  1. 统计字符:输入一行字符串,可以有空格,分别统计出包含英文字母、空格、数字和其它字符的个数;
    其具体实现的代码如下:
#include<iostream>
#include<string>

using namespace std;

int main()
{
    string str;   
    while(getline(cin,str))
    {
       int n1=0,n2=0,n3=0,qt=0;
       int len = str.size();
       for(int i = 0;i<len;i++)
       {
         if((str[i]-'a'>=0 && str[i]-'a'<=25) || (str[i]-'A'>=0 && str[i]-'A'<=25)) n1++;       
         else if(str[i] == ' ')  n2++;
         else if(str[i]>='0' && str[i]<='9') n3++; 
         else qt++;
       }        
       cout<<n1<<endl<<n2<<endl<<n3<<endl<<qt<<endl;          
    }
    return 0;   
}
  1. 截取字符串:输入一个字符串和一个整数k,截取字符串的前k个字符并输出,第一行输入待截取的字符串,第二行输入一个正整数k,代表截取的长度,输出截取后的字符串;
    其具体是是实现的代码如下:
#include<iostream>
#include<string>
using namespace std;

int main()
{
    string str,s1;
    int k;       
    while(cin>>str>>k)
    {
        s1= str.substr(0,k);
        cout<<s1<<endl;       
    }
    return 0;
}
  1. 表示数字:输入一个字符串,将该字符中所有出现的数字前后加上符号“*”,其他字符保持不变输出;
    其具体实现的代码如下:
#include<iostream>
#include<string>

using namespace std;

int main()
{
   string str;  
   while(cin>>str)
   {
     string ss ="";
     int len = str.size();
     for(int i= 0;i<len;i++) 
     {
        if(str[i]>='0' && str[i]<='9')  {ss+=str[i];}
        else
        {
           if(ss =="") {cout<<str[i];}
            else if(ss !="")
            {
              cout<<"*"<<ss<<"*"<<str[i]; 
               ss = "";
            }
        }
    }
      if(ss !="") { cout<<"*"<<ss<<"*";}  //当输入的字符都是数字时
       cout<<endl;   
   }                                            
    return 0;
}

10.图片整理:Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好,Lily使用的图片包括"A"到"Z"、“a"到"z”、“0"到"9”。输入字母或数字个数不超过1024,Lily的所有图片按照从小到大的顺序输出;
其具体实现代码如下:
C++代码实现

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

int main()
{
    string str;
    while(getline(cin,str))
    {
      sort(str.begin(),str.end());
     
       cout<<str<<endl;
    }
    return 0;
}

C语言代码实现

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int cmp(const void* a,const void* b)
{
    return *(char*)a-*(char*)b;
}

int main(void)
{
   char cc[1024]={0};   
   while(scanf("%s",cc) != EOF)
   {    
       int len = strlen(cc);
       qsort(cc,len, sizeof(char),cmp);
       for(int i = 0;i<len;i++)
       {
           printf("%c",cc[i]);
       }
       printf("\n");      
   }   
    return 0;
}
  1. 找出字符串中第一个只出现一次的字符:输入几个非空字符串,输出第一个只出现一次的字符,如果不存在输出-1;
    其具体实现代码如下:
#include<iostream>
#include<string>

using namespace std;

void fun(string ss)
{
   int len = ss.size();
   int count[128] = {0};
   char s;
   for(int i = 0;i<len;i++)
   {
       count[ss[i]]+=1;
   }
    int flag = 0;
   for(int i = 0;i<len;i++)
   {
      if(count[ss[i]]==1) 
      {
        s = ss[i];
        cout<<s<<endl;
         flag = 1; 
          break;
      }
   }
    if(flag == 0) 
    {
     cout<<"-1"<<endl;    
    }    
}

int main()
{
    string str1;
    string str2;
    while(cin>>str1>>str2)
    {
        fun(str1);
        fun(str2);
    }   
    return 0;
}
  1. 单词倒排:对字符串中的所有单词进行倒排,说明:

1、构成单词的字符只有26个大写或小写英文字母;

2、非构成单词的字符均视为单词间隔符;

3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

4、每个单词最长20个字母;
输入一行以空格来分割的句子,输出句子的倒序;

#include<iostream>
#include<string>
#include<vector>

using namespace std;

void fun(string str)
{
    vector <string> vc; 
    int len = str.size();
    int sublen = 0;
    for(int i = 0;i < len;i++)
     {
         if(str[i]>='a' && str[i]<='z'|| str[i]>='A' && str[i]<='Z')
         {
               sublen ++;
               continue;             
         }  
        else 
        {
            if(sublen > 0)
          {
            vc.push_back(str.substr(i-sublen,sublen));  
            sublen = 0;
          }  
        }               
     }  
     if(sublen > 0)
          {
            vc.push_back(str.substr(len-sublen,sublen));  
          } 
       for(int i = vc.size()-1;i>0;i--)   cout<<vc[i]<<' ';
        cout<<vc[0]<<endl;    
}

int main()
{
    string ss;
    while(getline(cin,ss))
    {
        fun(ss);
    }  
    return 0;
}

  1. 简单密码:假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。他是这么变换的,大家都知道手机上的字母: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,
    声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾,输出渊子真正的密文;
    其具体实现的代码如下:
#include<iostream>
#include<string>

using namespace std;

void fun(string str)
{
    int len = str.size();
    string ss="";
    for(int i=0;i<len;i++)
    {
        if(str[i]=='Z') 
        {
            str[i]= 'a';
            ss+=str[i];  
        }
        else if(str[i]>='A' && str[i]<'Z')
        {
            str[i]+=33;
            ss+=str[i];           
        }
        else if(str[i]>='a' && str[i]<='z')
        {
            if(str[i]=='a' || str[i]=='b' || str[i]=='c')  str[i] = '2'; 
            else if(str[i]=='d' || str[i]=='e' || str[i]=='f')  str[i] = '3'; 
            else if(str[i]=='g' || str[i]=='h' || str[i]=='i')  str[i] = '4';
            else if(str[i]=='j' || str[i]=='k' || str[i]=='l')  str[i] = '5';
            else if(str[i]=='m' || str[i]=='n' || str[i]=='o')  str[i] = '6';
            else if(str[i]=='p' || str[i]=='q' || str[i]=='r' || str[i]=='s')  str[i] = '7';
            else if(str[i]=='t' || str[i]=='u' || str[i]=='v')  str[i] = '8';
            else if(str[i]=='w' || str[i]=='x' || str[i]=='y' || str[i]=='z')  str[i] = '9';   
            ss+=str[i];
        }
         else {ss+=str[i];}      
    }
       cout<<ss<<endl;
}

int main()
{
    string ss;
   while(getline(cin,ss)) 
   {
       fun(ss);
   }
    return 0;
}
  1. 字符串加解密:
    描述如下:
    1、对输入的字符串进行加解密,并输出。
    2、加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同 时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。
    3、解密方法为加密的逆过程;
    输入一串要加密的密码和一串加过密的密码,分别输出加密后的字符和解密后的字符;
    其具体实现代码如下:
#include<iostream>
#include<string>

using namespace std;

void fun1(string str1)
{
   int len1 = str1.size();
   string s1 = "";
   for(int i= 0;i<len1;i++)
   {
       
        if(str1[i]=='9')
       {
           str1[i] = '0';
           s1+=str1[i];
       }
        else if(str1[i]>='0' && str1[i]<'9')
       {
           str1[i]=str1[i]+1;
           s1+=str1[i];           
       }
       else if(str1[i]=='z')
       {
           str1[i] = 'A';
           s1+=str1[i];
       }
       else if(str1[i]=='Z')
       {
           str1[i] = 'a';
           s1+=str1[i];
       }     
       else if(str1[i]>='a' && str1[i]<'z')
       {
           str1[i]=str1[i]-31;
           s1+=str1[i];           
       }
       else if(str1[i]>='A' && str1[i]<'Z')
       {
           str1[i]=str1[i]+33;
           s1+=str1[i];           
       }
   }
    cout<<s1<<endl;     
}

void fun2(string str2)
{
   int len2 = str2.size();
   string s2 = "";
   for(int i= 0;i<len2;i++)
   {
       
        if(str2[i]=='0')
       {
           str2[i] = '9';
           s2+=str2[i];
       }
        else if(str2[i]>'0' && str2[i]<='9')
       {
           str2[i]=str2[i]-1;
           s2+=str2[i];           
       }
       else if(str2[i]=='A')
       {
           str2[i] = 'z';
           s2+=str2[i];
       }
       else if(str2[i]=='a')
       {
           str2[i] = 'Z';
           s2+=str2[i];
       }     
       else if(str2[i]>'a' && str2[i]<='z')
       {
           str2[i]=str2[i]-33;
           s2+=str2[i];        
       }
       else if(str2[i]>'A' && str2[i]<='Z')
       {
           str2[i]=str2[i]+31;
           s2+=str2[i];        
       }
   }
    cout<<s2<<endl;     
}

int main()
{
   string ss1;
   string ss2;
   while(cin>>ss1>>ss2)
   {
      fun1(ss1);
      fun2(ss2);
   }  
    return 0;
}
  1. 购物单:王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:
    主件 附件
    电脑 打印机,扫描仪
    书柜 图书
    书桌 台灯,文具
    工作椅 无
    如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。王强想买的东西很多,为了不超出预算,他把每件物品规定了一个重要度,分为 5 等:用整数 1 ~ 5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是 10 元的整数倍)。他希望在不超过 N 元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
    输入的第 1 行,为两个正整数,用一个空格隔开:N m
    (其中 N ( <32000 )表示总钱数, m ( <60 )为希望购买物品的个数。)
    从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 3 个非负整数 v p q
    (其中 v 表示该物品的价格( v<10000 ), p 表示该物品的重要度( 1 ~ 5 ), q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号);
    输出文件只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值( <200000 )
    其具体实现的代码如下:
#include<iostream>
#include<array>
#include<cmath>

using namespace std;


int dp[32000];             // 物品的价格与重要度的乘积之和

int main()
{
    int N,m;
    cin>>N>>m;
    int zj[m+1],zj_v[m+1],fj1[m+1],fjl_v[m+1],fj2[m+1],fj2_v[m+1];  
    while(m>0)
    {   
        for(int i= 1;i<=m;i++)
        {          
                int v,p,q;
                cin>>p>>v>>q;              
                if(q == 0)
                {
                    zj[i] = v;
                    zj_v[i] = p*v;
                }
                else if(fj1[q] == 0) // 数组同一个索引值唯一
                {
                    fj1[q] = v;
                    fjl_v[q] = p * v;                    
                }
                else if(fj2[q] == 0)  // 数组同一个索引值唯一
                {
                    fj2[q] = v;
                    fj2_v[q] = p * v;
                }             
        }
       for(int i= 1;i<=m;i++)
       {
           for(int j =N;j>0;j--)
           {                          
               dp[j] = zj_v[i];
               if(j>=zj[i]){ dp[j] = max(dp[j], dp[j-zj[i]]+zj_v[i]);} 
               else if(j>=(zj[i]+fj1[i]))  { dp[j] = max(dp[j], dp[j-zj[i]-fj1[i]]+zj_v[i]+fjl_v[i]);}  
               else if(j>=(zj[i]+fj2[i]))  { dp[j] = max(dp[j], dp[j-zj[i]-fj2[i]]+zj_v[i]+fj2_v[i]);} 
               else if(j>=(zj[i]+fj1[i]+fj2[i])) { dp[j] = max(dp[j], dp[j-zj[i]-fj1[i]-fj2[i]]+zj_v[i]+fjl_v[i]+fj2_v[i]); }
           }
       }
          cout<<dp[N]<<endl;
      }  
    return 0;
}
  1. 放苹果组合问题:把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入两个int整数,输出一个int整数:
    其具体实现代码如下:
#include<iostream>

using namespace std;

int fun(int m,int n)
{
    if(m < 0 || n < 0)
    {
        return 0;
    }
    else if(m == 1 || n == 1)
    {
        return 1;
    }
    else 
    {
        return fun(m,n-1)+(m-n<0?0:fun(m-n,n));
    }
}
  int main()
{
   int a;
   int b;
   while(cin>>a>>b)
   {
      cout<<fun(a,b)<<endl; 
   }   
    return 0;
}
  1. 求解立方根
    计算一个数字的立方根,不使用库函数,结果保留一位小数。
    其具体实现的代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
double func(double n)
{
    double r = n;
    double l= 0, mid = 0;
    if (n < 1)
        r = 1;
    while ((r - l) > 1e-4)
    {
        mid = (r + l) / 2;
        if (mid * mid * mid > n)
            r = mid;
        else
            l = mid;
    }
    return l;
}

int main()
{
    double n;
    while (cin >> n)
    {
        if (n > 0)
            cout << fixed << setprecision(1) << func(n) << endl;
        else
            cout << fixed << setprecision(1) << -func(-n) << endl;
    }
    return 0;
}

  1. 汽水瓶
    有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
    其具体实现代码如下:
#include<iostream>
using namespace std;

int fun(int num)
{
   int rst = 0;
   int mid = 0;
  if(num<=1 && num!=0)
   {
       rst+=0;
   }   
   while(num >= 2)
   {  
       num +=1;
       mid= num/3;
       num = num%3+mid-1;
       rst += mid;       
   }              
   return rst;
}

int main()
{
   int n;
   while(cin>>n)
   {
      if(n!=0)
      {
           cout<<fun(n)<<endl;  
      }
    
   }
   return 0;
}
  1. 统计每个月的兔子总数:有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?(斐波那契定理)
    其具体实现代码如下:
#include<iostream>
using namespace std;

int fun(int month)
{
   int f[month];
    f[1]=1;
    f[2]=1;
    for(int i=3;i<=month;i++)
    {
        f[i]=f[i-1]+f[i-2];
    }        
    return f[month];
}

int main()
{
    int m;
    while(cin>>m)
    {       
         cout<<fun(m)<<endl;          
    }
    return 0;
}
  1. 四则运算:
    输入一个表达式(用字符串表示),求这个表达式的值。保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。
    其具体实现的代码如下:
#include <iostream>
#include <stack>
 
using namespace std;
 
int  pos = 0;
 
int compute(string & data)  //第一步 
{
    int len = data.length();
    int num = 0;
    char flag = '+';
    stack<int> st;
 
    while (pos < len) 
	{
        
		if (data[pos] == '{' || data[pos] == '[' || data[pos] == '(')
		 {
            pos++;
            num = compute(data);//遇到左括号,直接递归执行第一步  num = 0 
         }
 
        while (pos < len && isdigit(data[pos])) 
		{
            num = num * 10 + data[pos] -'0';
            pos++;
        }
               
        switch (flag)
		{
        case '+':
            st.push(num);   //遇到数字先压栈 
            break;
        case '-':           //遇到数字先压栈 
            st.push(-num);
            break;
        case '*':
            {
                int temp = st.top();      
                st.pop();         //先出栈 
                temp *= num;       //和下一个进行乘运算 
                st.push(temp);     //将运算结果压栈 
                break;
            }
        case '/':
            {
                int temp = st.top();
                st.pop();
                temp /= num;               
                st.push(temp);
                break;
            }
        }
        num = 0;
		flag = data[pos];       
        if (data[pos] == '}' || data[pos] == ']'|| data[pos] == ')')
		 {
            pos++;
            break;     //退出函数 
         }
        pos++;
    } 
   
    int sum = 0;
    while (st.size()) {
        sum += st.top();    //保证栈内所有数字都是加数,对所有加数求和 
        st.pop();
    }
    return sum;
}
int main()
{
    string data; 
    while (cin >> data)
	{        
		cout << compute(data) << endl;
    } 
    return 0;
}

22.XX
23. xxxx
24. xxxx
25. xxxx
26. xxxx
27. xxx
10.XXXXx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值