![](/img/trans.png)
[英]Is there a function in c that will return the index of a char in a char array?
[英]How to return the index of ascii char in C
因此,您可以使用Table將英文字母中的26個ascii字符映射到它們相應的莫爾斯電碼字符串
typedef struct a_look_tab {
char table[asciiNum][MORSE_MAX+1];
} ALookTab;
asciiNum是a的0,b的1,依此類推。 如何返回作為莫爾斯字符的索引的索引(int)。
因此,將char轉換為數字后,我們要做的就是將ascii參數轉換為ascii字符並返回給定ascii字符的索引,我們該怎么做?
將char轉換為索引的最簡單的可移植方式是這種類型的構造:
/* Returns -1 if c is not an upper- or lower-case alphabetical character */
int char_to_index(char c)
{
static const char * const alphabet = "abcdefghijklmnopqrstuvwxyz";
char *p = strchr(alphabet, tolower((unsigned char)c));
return p ? p - alphabet : -1;
}
您需要將一個字符(例如“ a”)轉換為表中的索引。 根據您的規范,該表以“ a”的莫爾斯電碼開頭,因此“ a”應映射到索引0,“ b”應映射到1,依此類推。
最簡單的映射可以這樣實現:
int char_to_index(char c)
{
return tolower(c) - 'a';
}
這將從給定字母中減去“ a”的ASCII碼,這會將“ a”變為0,依此類推。
不幸的是,這僅在運行程序的計算機使用將連續代碼分配給字母的系統對字母進行編碼的情況下有效。 並非所有計算機都是這樣。 更具移植性的函數可以顯式地進行映射,如下所示:
int char_to_index2(char c)
{
switch(tolower(c))
{
case 'a': return 0;
case 'b': return 1;
case 'c': return 2;
/* and so on */
}
}
這在代碼方面更為冗長,但更易於移植。
更新:我向兩個函數添加了對tolower()
調用,以使它們更加健壯。
請注意,C標准不需要ASCII,並且該代碼在EBCDIC下不起作用,但是99%的時間都無關緊要。
我相信您要尋找的東西比您想的要簡單得多。 字符文字像'c'
和'0'
是actualy int
S,不char
秒-他們正在鑄造到char
的分配,並可以很容易地投回來了。 這就是您想要的(我認為):
#include <ctype.h> // for tolower()
char *func(ALookTab *a, char c)
{
if(isalpha(c))
return a->table[tolower(c) - 'a'];
if(isdigit(c))
return a->table[c - '0' + 26];
// handle special characters
}
請注意,此代碼假定您的摩爾斯電碼以您選擇的任何順序存儲為26個字母字符,10個數字以及其他特殊字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.