1

文字列を加算、減算、乗算、および除算するプログラムを作成しようとしています。私がプログラムで現在取り組んでいるのは、入力文字列を 2 つの文字列に分割し、適切な +-/* を実行する方法を考え出すことです。

入力は 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 ループの代わりに 2 つの文字列を分割することができます。strrchr の man ページを参照してください

  4. また、キャラクターを追加するというあなたのアイデアは明確ではありません。あなたの例から、a = 1、b = 2 などを検討しているように見えます。そのような場合、コードで大文字と小文字が区別されない場合は、すべての入力を大文字に変換し(input[0] - 'A')+1てから、a のように文字を変換することができます。 b、c から 1、2、3 など

これらの指針が役立つことを願っています。問題のステートメントをもう一度確認し、それに応じてコードをリファクタリングすることをお勧めします。

于 2012-09-20T01:32:39.847 に答える