char a[20]="this is";
cout<<strchr (a,'t')-a;
怎麼可以這樣(一,「T」) - ?一個」可顯示字母T第一次出現的索引是如何工作的 有人說,編譯器使得ASCII字符的總和,然後 減去所確定的字符。,和strchr從字符串值的指數
char a[20]="this is";
cout<<strchr (a,'t')-a;
怎麼可以這樣(一,「T」) - ?一個」可顯示字母T第一次出現的索引是如何工作的 有人說,編譯器使得ASCII字符的總和,然後 減去所確定的字符。,和strchr從字符串值的指數
x = strchr (a, 't')
返回一個指針,指向C字符串a
中第一個出現的字符t
。在你的情況下,這恰好與a
中的第一個字符的地址相同。這也是變量a
指向的內容。
通過減去x - a
你減去兩個地址,這(感謝pointer arithmetic magic)將給't'
a
索引。這是零,因爲x
和a
是相等的。真的與ASCII無關。
這純粹是指針運算。
strchr (a,'t')
指針在串a
返回到字符't'
。 a
保持字符串的地址。
strchr (a,'t')
- 一個回報你的t
字符串中的索引a
例子:一個具有addrress 100內的h
地址將是101,
所以你會得到字符^ h
指數1strchr返回一個指向字符串中第一個找到的字符的指針。
char str[] = "Some string with spaces";
char* ptr;
ptr = strchr(str, ' ');
while(ptr != 0)
{
printf("Space on %d. place\n", ptr - str);
ptr = strchr(ptr + 1, ' ');
}
你可以保證有人說這是完全荒謬的,有幾個原因。 – usr2564301
...順便說一句,作爲一個實驗,這不是一個很好的例子。例如,'cout <<'t' - 't';'也會'顯示't'的第一次出現的索引。「因此,重複你的行,並用樣本字符串中出現的所有字母(和非字母)替換「t」。爲了好玩,請在示例字符串中包含* not *。 – usr2564301