【问题标题】:Performing arithmetic on Characters in C在 C 中对字符执行算术运算
【发布时间】:2012-09-12 08:45:05
【问题描述】:

我正在尝试编写一个对一串字符进行加减乘除的程序。我现在的程序是弄清楚如何将输入字符串分成两个字符串,然后执行适当的 +-/*。

输入应该是这样 abc+aaa

输出应该是 abc + aaa = bcd

如何将字符串转换为整数字符串?

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

int main() {

printf("This is a pseudo arithmetic program");

char input[10];
input[10] = '\0';
char first [9];
first[9] = '\0';
char last [9];
last[9] = '\0';

int i = 0; 
int b; 
int e;

while (input[0] != '0') {

if (input[0] == 0){
return -1;
}

printf("\nEnter a math problem in SOS format using only lowercase letters up to 9    characters");
printf("\nEx: abc+abc... type '0' to quit \n");
scanf("%s", input);

int x = 0;
x = strlen(input); 

    if (strchr(input, '+')){
    for (i = 0; i <= x; i++) {
         if (i == '+')
         strncpy(first, &input[0], i-1);
         i = 0;
    }
    for (i = x; i >= input[0]; i--) {
         if (i == '+')
         strncpy(last, &input[i], x);
         i = 0;    

    } 

     printf("%s", first);     
     printf(" + ");
     printf("%s", last);
     printf(" = %d", first + last);
    }

【问题讨论】:

  • 那么输入字符串的基数是什么?看起来可能以 26 为底,带有 a=(第一个非零值)?如果是这样,那么零值是多少?可能我只是愚蠢地不知道 SOS 格式是什么,但 Google 似乎没有帮助。
  • 只需将 2 个字符加起来,然后按字符减去 'a'
  • 我不确定你所说的基数是什么意思,但我相信 a-z 等于 0-25,而 A-Z 等于 26-41。所以如果程序要解决这个问题 a - a 那么答案应该是 Z。我认为根本不存在零值。
  • nhahtdh 你能详细说明一下吗?

标签: c string math char int


【解决方案1】:

您的代码似乎存在多个问题:

  1. 几乎所有数组都出现了数组越界:

    字符输入[10];
    输入[10] = '\0';

如果你想用'\0'初始化最后一个字符,那么它应该是

input [9] = '\0'

数组索引总是从 0 开始。

  1. 不清楚下面几行有什么用:

    while (input[0] != '0') { if (input[0] == 0){ return -1; }

  2. 当输入一个字符串时,为什么提示用户输入一个 0 来结束它?

  3. strrchr 返回搜索字符开始的指针。因此,您可以自己确定“+”符号的位置,并且两个拆分字符串而不是您的 while 循环。见strrchr man page

  4. 另外,您添加字符的想法还不清楚。从您的示例中,您似乎正在考虑 a = 1、b = 2 等。在这种情况下,如果您的代码不区分大小写,那么您可以将所有输入转换为大写,然后执行 (input[0] - 'A')+1 来转换您的字母比如 a, b, c 到 1, 2, 3 等等。

希望这些指针对您有所帮助。建议您再次检查您的问题陈述并相应地重构您的代码。

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 2017-01-10
    • 2013-09-06
    • 2015-09-17
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多