2014-10-29 66 views
0

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

但我不知道如何繼續執行它。

+0

請注意,一個'int *'指向一個'int'。 '1,2'是兩個整數。你可以安排'int'指向'1',但是你怎麼知道還有多少個數字跟在1之後呢? – MSalters 2014-10-29 12:43:19

+0

每個相應大小的動態重新分配和存儲確實是我必須考慮的事情,但現在我滿足於瞭解如何將字符映射到整數指針! – krystah 2014-10-29 12:46:41

+0

所以你想擁有包含字母表(a-z)的數組,你可以從這個數組中得到特定字符的索引數組? – 4rlekin 2014-10-29 12:57:25

回答

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循環中爲大寫字母填入第一個元素)。但我想你會從現在起管理

相關問題