我有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
显然仍然是整数,而不是char。我正在考虑按照
int *getCharLocations(char c) {
// returns a pointer to the stored character locations
}
但我不知道如何继续实施它。
答案 0 :(得分:2)
好的。
虽然它可能会非常丑陋和复杂
所以,如果你不介意我建议放弃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
<小时/> 这几乎就是它 我没有测试它所以它可能需要一些抛光,但这样的方法应该做到这一点 PS。