我正在使用一个用C语言编写的程序,该程序涉及比较混合的姓氏。例如,它可能会比较Mary Jay-Blige和Mary Kay-Blige。 找到连字符并将变量设置到其位置的代码是:
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
。所以我想一旦找到指定的char,它会返回字符串的剩余部分吗?
答案 0 :(得分:1)
是的,strchr返回第一个出现的地址(不是索引)。因此,您从中减去原始字符串(地址)以获取连字符的位置。但是这里的+1会让你获得连字符后的第一个位置(索引)。
这样p_ich [iPosHyphen] =='B'。
答案 1 :(得分:1)
这是非常基本的C指针算法,您可以轻松找到有关它的大量信息。
从另一个指针中减去一个指针会产生它们的索引之间的距离,就像它们是同一个数组的一部分一样。在您的示例中,它将是* p_ich *和* LAST_NAME *之间的距离。 使用标准字符类型,距离将等于存储器地址之间的差异,但通常是:
ptr1-ptr2 == ((unsigned long)ptr - (unsigned long)ptr2)/sizeof(*ptr)