2010-05-22 47 views
0

INT *我有以下的数组:无效转换从“字符”到“用C

int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1}; 
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0}; 
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1}; 
//etc... for all letters of the alphabet 

而且,打印在5×3的字母的函数LED矩阵:

void printLetter(int letter[]) 

我有一串字母:

char word[] = "STACKOVERFLOW"; 

我想将字符串的每个字符传递给printLetter函数。

我想:

int n = sizeof(word); 

for (int i = 0; i < n-1; i++) { 
    printLetter(word[i]); 
} 

但我得到以下错误:从“字符”无效转换到“诠释*”

我应该怎么做?

谢谢!

回答

5

参数类型错误的后面有一个更深的问题:缺少char和相应的int[]之间的映射。

重新定义printLetter作为

void printLetter(char letter) 

满足编译器,但并没有解决你的问题本身。无论是在printLetter之内还是之外,对于给定的char,您需要获取相应的int[]

一个简单的暴力方式来实现,这将是使用switch,但更好的方法是使用第二个阵列,即是这样的:

void printLetter(char letter) { 
    static int* charToMatrix[] = { A, B, C, ... }; 
    int* matrixToPrint = charToMatrix[letter - 'A']; 
    // print the matrix 
} 

注意,这是一个例子 - 我目前无法使用C编译器,因此我无法保证它立即可用,但希望它能够充分说明这一点。它也缺少边界检查,所以它会在奇怪的随机位置访问内存,如果尝试打印“未知”字符,可能会导致崩溃。

该解决方案应该适用于大写字母;如果您还需要输出小写字母或其他字符,则可能需要使用256个元素的数组,其中只有与“已知”矩阵对应的索引元素被填充,其余元素被设置为NULL。

1

该函数声明为void printLetter(int letter[]),这意味着它需要一个指向int数组的指针。另一方面,word是一个字符数组,word[i]是一个字符,它并不是正确的类型。如果printLetter()实际上只是打印单个字符,则应该将其参数更改为字符。

+0

没有评论的投票非常粗鲁无用。如果你对我的回答有问题,请说出它的含义。据我所知,我的答案完全正确。 – Chuck 2010-05-22 21:18:39

+0

+1对于错误问题的正确答案 - 如果您查看留在我答案中的评论(与您的答案几乎相同),则OP为-1,因为未发布的代码失败。难道你不知道,你应该阅读头脑。 – Alan 2010-05-22 21:21:43

0
void printLetter(int letter[]) 

应该是 void printLetter(char letter)

因为:word是char [] word[i]是一个字符。

+0

但我要打印的原始数组是一个int数组,而不是一个char数组: int A [] = {0,1,1,1,1,1,0,1,0,0,0,1 ,1,1,1-}; 如果我按照你的意见,我得到这个错误: 从'char'无效转换为'char * – majdal 2010-05-22 21:10:14

+0

这是因为你需要修复printLetter()这是你没有发布的代码。根据你提供的信息,我的回答是正确的。 – Alan 2010-05-22 21:21:17

2

你不能如此简单地将“a”从“stackoverflow”转换为A - 整数的数组。你可以在一个单一的字母中定义所有代表一个字母的数组,并通过将你的字母转换为int来获得它们。

2

你需要做的是从一个字符转换为你的一个数组。所以当你有字母'A'时,你会想要使用数组A。最简单的方法是通过查找表。

int *lookup[256]; // assuming ASCII 
memset(lookup, 0, sizeof(lookup)); 

lookup['A'] = A; 
lookup['B'] = B; 
... 

然后,当你有一个字符,可以得到适当的数组:

void printletter(char c); 
{ 
    int *data = lookup((unsigned char)c); 

    // In case you get a letter that you don't know how to display 
    if (data != NULL) 
    { 
     // display with data 
    } 
} 

而是在运行时建立的数组,你也可以在编译时建立你的阵列虽然会有点难,因为你需要手动输入NULL指针。

int *lookup[256] = { 
    NULL, // you need a total of 65 NULL's 
    NULL, 
    ... 
    A,  // so this is at the correct position 
    B, 
    C, 
    ... 
}; 
相关问题