2012-09-20 92 views
1

我正在嘗試編寫一個程序,它可以對字符串進行加,減,乘和除。我現在在程序中的地方是弄清楚如何將輸入字符串拆分爲兩個字符串,然後執行相應的+ -/*。在字符C上執行算術運算

輸入應該是這樣的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); 
    } 
+0

那麼輸入字符串是什麼基地呢?它看起來可能是基數26,其中a =(第一個非零值)?如果是這樣,零值是什麼?這可能是因爲我不知道SOS格式是什麼,而是愚蠢的,但Google似乎沒有幫助。 – Tommy

+0

只需添加2個字符,然後減去字符''a''。 – nhahtdh

+0

我不確定你的基數是什麼,但我相信a-z將等於0-25,而A-Z等於26-41。所以如果程序要解決這個問題,那麼答案應該是Z.我認爲根本不應該是零值。 – Church

回答

0

似乎有與您的代碼的多個問題:

  1. 有一個陣列出界發生的幾乎所有的數組:

    炭輸入[10];
    input [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將你的字母轉換爲,b,c到1,2,3等

希望這些指針能夠幫助。建議您再次檢查您的問題陳述並相應地重構您的代碼。