2011-05-13 126 views
0

我正在用C編寫的一個程序,它涉及比較超級姓氏。例如,它可能會將Mary Jay-Blige與Mary Kay-Blige進行比較。 用於查找連字符,並設置一個變量,以它的位置的代碼是:strchr(),APT_String和減法運算

APT_String LAST_NAME 
char * p_ich; 
int iPosHyphen; 
p_ich = strchr(LAST_NAME,'-'); 
iPosHyphen = p_ich-LAST_NAME+1; 

其中APT_String是IBM的DataStage的數據類型。

我繼承了上面的代碼,它似乎「工作」,但我想對p_ich-LAST_NAME+1操作進行一些說明。 也就是說,如果strchr()返回第一個' - '的位置,C如何處理這個算術?

如果我打電話cout<<p_ich;,我得到-Blige。所以我猜一旦找到指定的字符,它會返回字符串的其餘部分?

回答

1

是的,strchr返回第一次發生的地址(不是索引)。所以你從中減去原來的字符串(地址)來得到連字符的位置。但是這裏的+1會讓你在連字符之後的第一個位置(索引)。

這樣,p_ich [iPosHyphen] =='B'。

1

這是非常基本的C指針算術,你可以很容易地找到很多關於它的信息。

從另一個指針中減去一個指針會得到它們的索引之間的距離,就好像它們是同一個數組的一部分一樣。在你的例子中,它將是* p_ich *和* LAST_NAME *之間的距離。 使用標準的char類型的距離將等於內存地址之間,但總體差異:

ptr1-ptr2 == ((unsigned long)ptr - (unsigned long)ptr2)/sizeof(*ptr) 
+0

事實上,操作PTR-APT_String(不PTR-PTR)使得它不清楚什麼是真正回事。 – user898763452 2011-05-17 14:47:06