0

我正在编写一个今晚午夜到期的程序,我完全被卡住了。该程序是用 C 编写的,并以 SOS 的形式从用户那里获取输入,其中 S = 字符串,O = 运算符(IE '+'、'-'、'*'、'/')。书中的输入输出示例如下:

输入> abc+aab

输出:abc + aab => bce

这是字面上的,而不是可变的。就像,a + a 必须 = b。

执行此操作的代码是什么?我将发布到目前为止的代码,但它所做的只是获取输入并将其划分为每个部分。

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

int main() {
  system("clear");
  char in[20], s1[10], s2[10], o[2], ans[15];

  while(1) {
    printf("\nInput> ");
    scanf("%s", in);
    if (in[0] == 'q' && in[1] == 'u' && in[2] == 'i' && in[3] == 't') {
      system("clear");
      return 0;
    }
    int i, hold, breakNum;
    for (i = 0; i < 20; i++) {
      if (in[i] == '+' || in[i] == '-' || in[i] == '/' || in[i] == '*') {
        hold = i;
      }
      if (in[i] == '\0') {
        breakNum = i;
      }
    }
    int j;
    for (j = 0; j < hold; j++) {
      s1[j] = in[j];
    }
    s1[hold] = '\0';
    o[0] = in[hold];
    o[1] = '\0';
    int k;
    int l = 0;
    for (k = (hold + 1); k < breakNum; k++) {
      s2[l] = in[k];
      l++;
    }
    s2[breakNum] = '\0';
    printf("%s %s %s =>\n", s1, o, s2);
  }
}
4

3 回答 3

3

由于这是家庭作业,让我们专注于如何解决这个问题,而不是提供一堆我怀疑你的导师会皱眉的代码。

首先,不要在main()函数内部做所有事情。将其分解为较小的功能,每个功能都完成部分任务。

其次,将任务分解为其组件并写出伪代码:

while ( 1 )
{
    // read input "abc + def"
    // convert input into tokens "abc", "+", "def"
    // evaluate tokens 1 and 3 as operands ("abc" -> 123, "def" -> 456)
    // perform the operation indicated by token 2
    // format the result as a series of characters (579 -> "egi")
}

最后,编写每个函数。当然,如果您在途中遇到障碍,请务必回来询问您的具体问题。

于 2012-09-21T16:56:12.437 回答
0

根据您的示例,“a”的行为类似于 1,“b”的行为类似于 2,依此类推。鉴于此,您可以像这样对单个字符执行算术:

// Map character from first string to an integer.
int c1 = s1[j] - 'a' + 1;

// Map character from second string to an integer.
int c2 = s2[j] - 'a' + 1;

// Perform operation.
int result = c1 + c2;

// Map result to a character.
char c = result - 1 + 'a';

您必须添加一些内容:

  • 您必须将它放在一个循环中,以便为字符串中的每个字符执行此操作。
  • 您必须根据输入中指定的运算符来改变操作。
  • 你必须对每个结果做一些事情,可能会打印出来。
  • 你必须对超出字母表的结果做一些事情,比如“y+y”、“ab”或“a/b”。
于 2012-09-21T17:38:47.363 回答
0

如果我们从您的示例答案中假设这a将是 1 的表示,那么您可以找到所有其他值的表示值并a从中减去 的值表示。

 for (i = 0; i < str_len; i++) {
      int s1Int = (int)s1[i];
      int s2Int = (int)s1[i];
      int addAmount = 1 + abs((int)'a' - s2Int);
      output[i] = (char)(s1Int + addAmount)
 }

脚步

1) 对于 s1 或 s2 的长度

2) 检索第一个字符的十进制值

3) 检索第二个字符的十进制值

a4) 求字母(97)与第二个char + 1 <--的区别,假设a是1的表示

5) 将差异添加到 s1 字符并将十进制表示转换回字符。

示例 1:

如果 S1 字符是a,S2 字符是b

s1Int = 97

s2Int = 98

addAmount = abs((int)'a' - s2Int)) = 1 + abs(97 - 98) = 2

output = s1Int + addAmount = 97 + 2 = 99 = c

示例 2:

如果 S1 字符是c,S2 字符是a

s1Int = 99

s2Int = 97

addAmount = abs((int)'a' - s2Int)) = 1 + abs(97 - 97) = 1

output = s1Int + addAmount = 99 + 1 = 100 = d

于 2012-09-21T18:56:21.927 回答