我有一个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 循环中用大写字母填充第一个元素)。但我猜你会从现在开始管理
我是一名优秀的程序员,十分优秀!