Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要在C.A+;B必须=C_C_Computer Science - Fatal编程技术网

我需要在C.A+;B必须=C

我需要在C.A+;B必须=C,c,computer-science,C,Computer Science,我正在写一个今晚午夜到期的节目,我完全被卡住了。该程序是用C编写的,以SOS的形式从用户处获取输入,其中S=字符串,O=运算符(即“+”、“-”、“*”、“/”)。本书中的输入和输出示例如下: 输入>abc+aab 输出:abc+aab=>bce 这是字面意思,不是可变的。比如,a+a必须=b 执行此操作的代码是什么?我将发布到目前为止的代码,但是它所做的只是获取输入并在每个部分之间进行划分 #include <stdio.h> #include <string.h>

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

输入>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);
  }
}
#包括
#包括
int main(){
系统(“清除”);
[20],s1[10],s2[10],o[2],ans[15]中的字符;
而(1){
printf(“\n输入>”);
扫描频率(“%s”,英寸);
如果(在[0]=“q”&[1]=“u”&&in[2]=“i”&&in[3]=“t”){
系统(“清除”);
返回0;
}
int i,hold,breakNum;
对于(i=0;i<20;i++){
如果(在[i]='+'| |在[i]='-'| |在[i]='/'| |在[i]='*')){
保持=i;
}
如果(在[i]='\0'中){
breakNum=i;
}
}
int j;
对于(j=0;j\n”,s1,o,s2);
}
}

既然这是家庭作业,让我们把重点放在如何解决这个问题上,而不是提供一堆我怀疑你的老师会不喜欢的代码

首先,不要在
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")
}

最后,编写每个函数。当然,如果你在路上遇到了障碍,一定要回来问你具体的问题。

因为这是家庭作业,让我们把重点放在如何解决这个问题上,而不是提供一堆我怀疑你的老师会不喜欢的代码

首先,不要在
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")
}

最后,编写每个函数。当然,如果你在路上遇到了障碍,一定要回来问你具体的问题。

根据你的例子,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”、“a-b”或“a/b”

根据您的示例,“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”、“a-b”或“a/b”

如果我们从您的示例答案中假设
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)
 }
(i=0;i{ int s1Int=(int)s1[i]; int s2Int=(int)s1[i]; int ADDAMUNT=1+abs((int)'a'-s2Int); 输出[i]=(字符)(s1Int+addAmount) }
步骤

1) 对于s1或s2的长度

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

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


4) 找出字母
a
(97)和第二个字符+1之间的差异。如果我们从您的示例答案中假设
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)
 }
(i=0;i{ int s1Int=(int)s1[i]; int s2Int=(int)s1[i]; int ADDAMUNT=1+abs((int)'a'-s2Int); 输出[i]=(字符)(s1Int+addAmount) }
步骤

1) 对于s1或s2的长度

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

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


4) 找出字母
a
(97)和第二个字符+1之间的差异在你的问题中
y+y
的值是多少?所以你在问如何确定答案,但你确实没有提供规则。从您的示例中,您可以将每个字符的值设置为
character-'a'
以转换为数字,执行操作,然后再转换回(通过添加'a'),但这只是猜测——因为你还没有提供规则。@Tyler——在付出疯狂恐慌中敲出一些代码的代价之前,编写psedoo代码通常是个好主意。这样,您就可以只考虑算法,而不必担心编程语言的细微差别和缺点。(也可能是一个好主意,不要把事情拖到最后一分钟:-<-但我们都这样做了)如果我理解这个问题:z+z=z;z+y=y;y+y=x;y+a=z;y+b=a;