我想根据每个单词中的第一个字母将从文本中获得的单词存储在数组中。所有带"a"的单词都将储存在第一种情况下,带"b"的单词将储存在第二种情况下。。。我不知道如何将字符转换为索引,以便将其存储在数组中。
示例:
T[26]
如果单词中的第一个字母是"a",则该单词应以第一种情况存储:
T[1]=单词。
为了避免出现问题,我使用函数strlwr
将文本转换为小写形式,因此根据ASCII代码,所有字符都从97开始。
听起来好像你想要一个单词列表数组,因为你有几个单词从同一个字母开始。
struct word
{
char* text;
struct word* next;
}
struct word* words[26] = { NULL };
因此,一旦你找到一个单词,就把它的第一个字符转换成索引
int index = toupper(someword[0]) - 'A'; // 0..25 since A is ASCII 65
// check if there is any previous words
if (words[index] == NULL)
{
// first word
words[index] = malloc(struct word);
words[index]->text = strdup(someword); // malloc,strcpy
words[index]->next = NULL;
}
else // e.g. find last word
{
struct word* last;
struct word* p;
for ( last = p = words[index]; p != NULL; p = p->next )
{
last = p;
}
assert(last == NULL); // must be at least one
last->next = malloc(struct word);
last->text = strdup(someword);
last->next = NULL;
}
不,你需要一些功能来打印索引的所有单词
最后,您还需要清理所有分配的内存。
您需要一个单词数组。您可以使用这样的语法来索引第一个数组:
T['a']=word; //this works only if you have one word beginning with each letter
T['a'][a_len]=word; //this is what you need to do if you want to have
//an array of words for each letter
您可以使用它,因为"a"是ASCII字符,意思是值为97的字符。但您必须确保T的内存已分配到索引"z"。