2012-02-12 66 views
1

對我的任務的進一步幫助我早些時候問過。從標準輸入讀取字符串後,它會檢查任何非ASCII字符。它發現的任何內容都將顯示它的十六進制值和零偏移量。我知道它顯示十六進制很好,但我很難弄清楚如何顯示偏移量。這是我當前的代碼,用於提出這個問題,只顯示相關的行。在C中,檢查字符串中的偏移量並計算字節數

#define MASK 0x80 

auto int inChar; 

if ((inChar & MASK) == MASK) 
{ 
    printf("NON-ASCII INPUT: %x detected at offset %#x \n", inChar, inChar); 
    nonascii = 1; 
} 

還有一件事我需要幫助,希望這會更容易回答。如果行讀取除了ASCII之外什麼也沒有,它就是這樣寫出來並顯示讀取的總字節數。我知道如何用整數和乘法來做到這一點,只需要計算一次做某事的次數,但教授似乎希望我們以更直接的方式做到這一點。

這是我寫的代碼。

if (nonascii == 0) 
    printf("The input stream was pure ASCII with a total of %d bytes read", (numBytes &= inChar)); 

非常感謝那些幫助我的人。

回答

1

inChar是一個字符,而不是偏移量。偏移表示在字符串中找到字符的位置的數組索引,並且您應該使用%d格式化程序將其作爲十進制打印出來。

顯示字符串長度的最簡單方法是使用strlen()函數。但是如果你不允許使用它,那麼當你退出循環時,字符串的長度就是數組index + 1。

2

inChar包含的字符讀取;它不會攜帶有關字符在字符串中的位置的信息,因此無法計算出此變量的偏移量。

要看的地方是在哪裏填寫inChar與當前字符;不幸的是,我們沒有看到這部分代碼。最有可能的是,在這一點上,您正在從字符串中的某個索引中提取值,並且應該只使用相同的索引變量來顯示偏移量。另一種可能性是通過在字符串內移動指針來提取字符串中的值。在這種情況下,該方法提取的偏移是通過使用指針運算:說你有指針指向字符串和stringIter一個指向當前處理的字符開頭,然後尋求如何很遠的指針是從對方會告訴你在字符串中的偏移量:stringIter - 字符串

相關問題