我有一个正在解决的问题的简化版本。本质上,我需要读取一行输入并检查其中使用了哪些字符。
所以如果我有这样一句话:“乔伊喜欢面包”
输出将是:“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。我在这里错过了一些愚蠢而明显的东西吗?
#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");
}