使用 C 将单个值加载到数组中

问题描述 投票:0回答:1

我有一个正在解决的问题的简化版本。本质上,我需要读取一行输入并检查其中使用了哪些字符。

所以如果我有这样一句话:“乔伊喜欢面包”

输出将是:“abdeijklors”

输入>>“敏捷的棕色狐狸跳过了懒狗”

输出>>“abcdefghijklmnopqrstuvwxyz”(字母表)

我应该能够将其加载到数组中 - 但这不起作用。

这是我的代码示例,仅针对字母表进行了简化。 ASCII 值的降低和升高只是为了提供 26 个字母表的良好示例。

#include "letters.h"
#include <ctype.h>
#include <stdio.h>
void letters_used(char *line) {
        int c;
        int table[26]={0};
        int buff;

        //Go through the line and set values to 1 in each alphabetic position

        while (line) {
                c = *line;
                if (isalpha(c)) {
                        if isupper(c) {
                                c = tolower(c);
                        }
                        table[c-97]=1; //Lowering ASCII value for alphabetized order
                }
                line++;
        }

        //Walk through the array and print any true values

        int i;
        for (i=0;i<26;i++){
                c = table[i];
                if (c) {
                        c += 97 //Raising ASCII value back to normal
                        printf("%c", c);
                }
        }
        printf("\n");

但是无论我做什么,数组都不会打印,因为数组的值仍然设置为 0。如果我手动设置它们,它工作得很好,但是当我将它放入循环中时,我无法将值加载到数组,它保持在 0。我在这里错过了一些愚蠢而明显的东西吗?

arrays c pointers
1个回答
0
投票
#include <ctype.h>
#include <stdio.h>

void letters_used(const char *line) {
    int c;
    int table[26]={0};
    while (*line) {
        c = *line;
        if (isalpha(c)) {
            if (isupper(c)) c = tolower(c);
            table[c-'a'] = 1;
        }
        line++;
    }

    int i;
    for (i=0;i<26;i++){
        c = table[i];
        if (c) {
            printf("%c", i + 'a');
        }
    }
    printf("\n");
}

int main(void) {
    letters_used("Joey likes Bread");
}
© www.soinside.com 2019 - 2024. All rights reserved.