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