1

私は数字の文字列配列を持っています:

char numbers[5][10] = { "123456789", "0001234", "abc5xyz", "", "987654321" };

この配列を関数に渡します。

  for(i=0; i<5; i++) {
     MyFNatoi(numbers[i], &value);
     printf("array: '%s' int value: %d\n", numbers[i], value);
  }

この関数では、文字列全体が数字のみであるかどうかを確認し、そうである場合はtrueを返すにはどうすればよいですか?これまでのところ、私が持っているのは次のとおりです。

MyFNatoi(char *numArray, int *value) {

    int i;

    for (i = 0; i < 10; i++) {
        if (numArray[i] > 47 && numArray[i] < 58) {
            printf("%c", numArray[i] - 0);
            // sscanf(p, "%d", &value);
        }
    }
}

そして、それはただ戻ります:

123456789array: '123456789' int value: -1217188485
0001234array: '0001234' int value: -1217188485
5array: 'abc5xyz' int value: -1217188485
array: '' int value: -1217188485
987654321array: '987654321' int value: -1217188485

文字列と同等の値変数を取得しようとしています。したがって、文字列が123456789、の場合は、でvalueある必要があります123456789。の場合はabc5xyz、でvalueある必要があります0

これまでのところ、文字を0に変換し、:(を返します。

フルソース

#include <stdio.h>

MyFNatoi(char *numArray, int *value) {

    int i;

    for (i = 0; i < 10; i++) {
        if (numArray[i] > 47 && numArray[i] < 58) {
            printf("%c", numArray[i] - 0);
            // sscanf(p, "%d", &value);
        }

        // printf("%c", numArray[i]);
    }
// printf("- ");
}

int main( ) {

      char numbers[5][10] = { "123456789", "0001234", "abc5xyz", "", "987654321" };
      int i, value;

      for(i=0; i<5; i++) {
         MyFNatoi(numbers[i], &value);
         printf("array: '%s' int value: %d\n", numbers[i], value);
      }

      return 0;
   }
4

2 に答える 2

6

forループインは、配列のサイズではなくMyFNatoi()、の長さに基づいている必要があります。ではなく、を使用してください。numArraystrlen(numArray)10

isdigit()文字が数字であるかどうかを判別するために使用します。

すべての文字が数字の場合は、に割り当て*valueますatoi()。それ以外の場合は、次のように設定*value0ます。

void MyFNatoi(char *numArray, int *value)
{
    int i;
    const int len = strlen(numArray);

    for (i = 0; i < len; i++)
    {
        /* #include <ctype.h> for 'isdigit()'. */
        if (!isdigit(numArray[i])) break;
    }
    /* #include <stdlib.h> for 'atoi()'. */
    *value = len == i ? atoi(numArray) : 0;
}
于 2012-04-15T21:19:56.120 に答える
4

*value失敗を示すために0に設定しないでください-0は有効な整数です。本文に示されているように、代わりに戻り値を使用してください。自分でループするのではなく、標準ライブラリを使用してください。

#include <stdio.h>

/* return true on success */
int MyFNatoi(const char *numArray, int *value)
{
    int n = 0;
    return sscanf(numArray, "%d%n", value, &n) > 0 /* integer was converted */
       &&  numArray[n] == '\0'; /* all input got consumed */
}
于 2012-04-15T21:40:35.973 に答える