1

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

输入应该看起来像这样 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);
    }
4

1 回答 1

0

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

  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 手册页

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

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

于 2012-09-20T01:32:39.847 回答