0

次のプログラムで配列、文字列を含むポインタを試しましたが、どこが間違っているのかわかりません。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

// finding out the uper case and lower case in a string

int main()
{
    char *arr_1[] = {"CalCulaTor", "DoveTail", "MachiNing"};
    int i = 0, j;

    while(*(arr_1 + i) != '\0')
    {
        printf(" %d letter is %s ",i,islower(*(arr_1 + i)) ? "Lower case    " : "Not lower case");
        printf("\n");
        i++;
    }

    system("PAUSE");

    return 0;
}
4

3 に答える 3

3

コードは1つの文字列を処理しても問題ないように見えますが、3つの文字列の配列があります。その配列の反復を処理するには、別のループを追加する必要があります。

于 2013-03-08T04:21:33.370 に答える
0

char *arr_1[]charへのポインタの配列です。文字列の配列をループしてから、その文字列をループして個々の要素を取得する必要があります。

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char *arr_1[] = {"CalCulaTor", "DoveTail", "MachiNing"};
    size_t i, j;

    for (i = 0; i < 3; i++) {
        puts(arr_1[i]);
        for (j = 0; arr_1[i][j]; j++) {
            printf("'%d' element is %s.\n", j, islower(arr_1[i][j]) ? "Lowercase" : "Uppercase");
        }
        putchar('\n');
    }

    return 0;
}

最初のループは文字列(charへのポインタ)を取得し、arr_1[i]次に別の変数でその文字列をループすると、charへのポインタ内の要素がとして取得されarr_1[i][j]ます。

于 2013-03-08T04:41:28.737 に答える
0

文字列の配列の一般的なイディオムは、配列を NULL で終了することです。例えば:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

// finding out the uper case and lower case in a string
char *arr_1[] = {
  "CalCulaTor", "DoveTail", "MachiNing", NULL
};

int main()
{
    char **a = arr_1;
    while(*a)
    {
        int i = 0;
        char *c = *a;
        printf ("%s:\n", c);
        while (*c) {
          printf(" %d letter(%c) is %s ", 
            i++,
            *c, 
            (islower(*c) ? "Lower case    " : "Not lower case"));
          c++;
        }
        printf("\n");
        a++;
    }
    system("PAUSE");
    return 0;
}
于 2013-03-08T04:32:07.640 に答える