gpt4 book ai didi

c - 如何将字符映射到另一种类型的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:01 24 4
gpt4 key购买 nike

我有一个char*。我想逐个字符地解析它,并将每个字符的位置存储在 int* 中。

使用虚拟字符串“abbcdc”,内容应该如下

char       int*
-------------
'a' -> 0
'b' -> 1,2
'c' -> 3,5
'd' -> 4

我希望可以通过包含整个字母表的 char* 访问它,以便字母表指针中的每个字符都指向每个单独的整数指针。这就是我迷路的地方。

我知道我可以使用双星号语法指向一个指针

int **a = &aLocations;

但我真的不知道如何通过使用字符作为引用来引用位置指针。我是 C 语言的新手,所以感谢所有指点(双关语)。

更新 1:

int *aLocations = malloc(3*sizeof(int));
aLocations[0] = 13;
aLocations[1] = 9;
aLocations[2] = 57;

int **a = &aLocations;

这似乎按预期工作,但 a 显然仍然是一个整数,而不是一个字符。我正在考虑按照

的方式编写一个函数
int *getCharLocations(char c) {
// returns a pointer to the stored character locations
}

但我不知道如何继续实现它。

最佳答案

那好吧。
虽然它可能会非常丑陋和复杂。
因此,如果您不介意,我建议您放弃 char 并专门使用整数。
这是可能的,因为 char 实际上只是一个小整数。

因此,首先您需要创建二维字母表数组:

int *alphabet[26]; // this will create 26 element array of integer pointers

现在我们将填充它:

int i = 0;
for(i = 0; i < 26; i++) {
alphabet[i] = malloc(100 * sizeof(int)); //alloc memory for 100 integers (should be enough for human language if we're talking about single words here)
alphabet[i][0] = 'a' + i; // this will put a letter as first element of the array
alphabet[i][1] = 2 // here we will keep index of first available position in our indices array
}

所以现在我们有这样的数组:

'a', 2, ...    // '...' means here that we have space to fill here
'b', 2, ...
...
'z', 2, ...

并且您可以将字母出现的索引添加到这样的结构中:

alphabet[index_of_letter][alphanet[index_of_letter][1]] = index_of_letter; //put index at the end of array
alphabet[index_of_letter][1]++; // increment our index of available position


差不多就是这些了。<​​br/>我没有测试它,所以它可能需要一些改进,但这种方法应该可以解决问题。
PS.
上面的评论中有人提到了大写字母——在这种情况下,您需要将数组扩展到 52 个字符以存储大写字母的出现(也为此类记录在 for 循环中用大写字母填充第一个元素)。但我猜你会从现在开始管理

关于c - 如何将字符映射到另一种类型的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26630613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com