• Source
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4.  
    5. int bien[126];
    6. int phu[126];
    7. int dd[126];
    8.  
    9. void khoitao ()
    10. {
    11. int dem=1;
    12. for (int i=97; i<=122; i++)
    13. {
    14. bien[i]=dem;
    15. dem++;
    16. phu[i]=0;
    17. dd[i]=0;
    18. }
    19. }
    20.  
    21. int main ()
    22. {
    23. int t;
    24. cin>>t;
    25. for (int k=1; k<=t; k++)
    26. {
    27. string ex;
    28. cin>>ex;
    29. cout<<"Expression: "<<ex<<endl;
    30. khoitao ();
    31.  
    32. int kt=1;
    33. int N=ex.length();
    34. while (1)
    35. {
    36. if (kt==0) break;
    37. kt=0;
    38. for (int i=0; i<N-1; i++)
    39. {
    40. string tg="";
    41. for (int j=i; j<i+2; j++)
    42. {
    43. tg+=ex[j];
    44. }
    45. if (tg=="++")
    46. {
    47. if (i-1>=0 && ex[i-1]>='a' && ex[i-1]<='z')
    48. {
    49. int so=ex[i-1]-0;
    50. phu[so]++;
    51. }
    52. else if (i+2<=N-1 && ex[i+2]>='a' && ex[i+2]<='z')
    53. {
    54. int so=ex[i+2]-0;
    55. bien[so]++;
    56. }
    57. for (int j=i; j<N; j++)
    58. {
    59. ex[j]=ex[j+2];
    60. }
    61. for (int j=N-2; j<=N-1; j++)
    62. {
    63. ex[j]='\0';
    64. }
    65. kt=1;
    66. N=N-2;
    67. break;
    68. }
    69. else if (tg=="--")
    70. {
    71. if (i-1>=0 && ex[i-1]>='a' && ex[i-1]<='z')
    72. {
    73. int so=ex[i-1]-0;
    74. phu[so]--;
    75. }
    76. else if (i+2<=N-1 && ex[i+2]>='a' && ex[i+2]<='z')
    77. {
    78. int so=ex[i+2]-0;
    79. bien[so]--;
    80. }
    81. for (int j=i; j<N; j++)
    82. {
    83. ex[j]=ex[j+2];
    84. }
    85. for (int j=N-2; j<=N-1; j++)
    86. {
    87. ex[j]='\0';
    88. }
    89. N=N-2;
    90. kt=1;
    91. break;
    92. }
    93. }
    94. }
    95. int S=0;
    96. if (ex[0]>='a' && ex[0]<='z')
    97. {
    98. int so=ex[0]-0;
    99. S+=bien[so];
    100. dd[so]=1;
    101. for (int i=1; i<N; i++)
    102. {
    103. string tg="";
    104. for (int j=i; j<i+2; j++)
    105. {
    106. tg+=ex[j];
    107. }
    108. if (tg[0]=='+')
    109. {
    110. int so=tg[1]-0;
    111. S+=bien[so];
    112. dd[so]=1;
    113. }
    114. else if (tg[0]=='-')
    115. {
    116. int so=tg[1]-0;
    117. S-=bien[so];
    118. dd[so]=1;
    119. }
    120. }
    121. }
    122. else
    123. {
    124. for (int i=0; i<N; i++)
    125. {
    126. string tg="";
    127. for (int j=i; j<i+2; j++)
    128. {
    129. tg+=ex[j];
    130. }
    131. if (tg[0]=='+')
    132. {
    133. int so=tg[1]-0;
    134. S+=bien[so];
    135. dd[so]=1;
    136. }
    137. else if (tg[0]=='-')
    138. {
    139. int so=tg[1]-0;
    140. S-=bien[so];
    141. dd[so]=1;
    142. }
    143. }
    144. }
    145. cout<<"value = "<<S<<endl;
    146. for (int i=97; i<=122; i++)
    147. {
    148. if (dd[i]==1)
    149. {
    150. char kitu=i+0;
    151. cout<<kitu<<" = "<<bien[i]+phu[i]<<endl;
    152. }
    153. }
    154. }
    155. return 0;
    156. }