0

程序原样告诉我有 0 个大写字母 0 个小写字母 0 个空格和 0 个制表符,但一个具有 2 个小写字母名称的数组还有 61 个其他字符。这些名称由 10 个字母组合而成。我想我需要一个循环来遍历数组,但我不确定这是否正确或我将如何做到这一点。

for (i=0; i<n_names; i++){
    printf("%d: [[%s]]\n", i, names[i]);}
for (i=0; i<20; i++){
    gets(names[i]);

    while (s[i] != 0)
    {
        if (s[i] >= 'a' && s[i] <= 'z') {
            lowercase++;
            i++;
        }         
        else if (s[i] >= 'A' && s[i] <= 'Z') {
            uppercase++;
            i++;
        }                
        else if (s[i] == '  ') {         /* Tab - write '\t' for clarity! */
            tab++;
            i++;
        }
        else if (*names[i] == ' ') {
            spaces++;
            i++;
        }
        else {
            other++;
            i++;
        }
    }
}

printf("Your string has %d lowercase letter(s) \n",lowercase);
printf("Your string has %d uppercase letter(s) \n",uppercase);
printf("Your string has %d tab(s) \n",tab);
printf("Your string has %d space(s) \n", spaces);
printf("Your string has %d other character(s) \n",other);
4

2 回答 2

0

我认为您没有粘贴整个代码,我认为您的“s”指向名称中的字符串。在您的 while 循环之前还将“i”初始化为零。

请使用标准函数 islower、isupper 和标签,您需要与 '\t' 进行比较

ctype.h 中针对您的场景的其他有用功能。

#include <ctype.h>

int isalnum(int c);
int isalpha(int c);
int isascii(int c);
int isblank(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
于 2013-05-01T00:43:11.320 回答
0
int i, n_idx;
for (n_idx = 0; n_idx < n_names; n_idx++) {
    const char *s = names[n_idx];
    for (i = 0; s[i] != 0; i++) {   
        if (s[i] >= 'a' && s[i] <= 'z') {
            lowercase++;
        }    
        else if (s[i] >= 'A' && s[i] <= 'Z') {
            uppercase++;
        }    
        else if (s[i] == '\t') {    
            tab++;
        }   
        else if (s[i] == ' ') {
            spaces++;
        }   
        else{
            other++;
        }   
    }   
}
于 2013-05-01T00:44:06.573 回答