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

时间:2014-10-29 12:40:33

标签: c pointers

我有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
}

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

1 个答案:

答案 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。
上面评论中有人注意到大写字母 - 在这种情况下,您需要将数组扩展为52个字符以存储大写字母的出现(也为这些记录填充for循环中带有大写字母的第一个元素)。但我想你会从现在开始管理