2011-08-18 101 views
2

我是C新手,我在指針方面遇到一些麻煩。指針和數組在C

在一個函數(用於打印單詞)中,我有一個參數const char *description,它指向一個字符串或字符數組,如「可見的臉部有一個微弱的輪廓」。

在另一個函數中,我將會有一個指向description中第一個字符的指針,然後一直移動,直到找到一個非空格。

char *pointerToFindFirstChar(char *description){ 
    /* Get my pointer to point to first char in description*/ 
    while (*pointerToFindFirstChar == ' '); 
    pointerToFindFirstChar++; 
    return pointer 
}  

我不確定我該怎麼做。 我想要實現的是在其中找到正被描述指向字符串的第一個非空格字符,並保存在另一個指針(希望是有道理的)

+0

您的函數名稱具有誤導性。你想達到什麼目的? – hari

+1

@jjc:請大寫你的句子的第一個單詞。它可以幫助人們閱讀:) – jweyrich

回答

1
char *find_first_char(char *desc) 
{ 
    while (*desc == ' ') desc++; 
    return desc; 
} 
+1

+1,但desc是'const char *',所以返回相同的類型... – MByD

+0

啊我想返回一個指向第一個字符的指針,所以我可以在另一個函數中使用它來查找單詞的結尾字符 – jjc

+0

@MByD謝謝你指出:P –

1

試試這個:

char *pointerToFindFirstChar(char *description) 
{ 
    while(*description == ' ') 
     description++; 
    return description; 
} 

注意檢查在字符串末尾的空字節是不必要的,因爲當*pointer == '\0',在while循環的條件,同時爲假,循環無論如何都會結束。

while行末尾擺脫;很重要;否則,循環將沒有主體並且運行0次或無限次(因爲pointer在循環中永遠不會被更改)。如果它運行0次,那麼退出循環後會發生增量。

0

只是爲了記錄在案,可以直接有增量後在循環的條件:

char *pointerToFindFirstChar(char *description) 
{ 
    while (*description++ == ' '); 

    return description; 
} 

在這種情況下你有一個空的循環體,因爲增量權後進行指針在循環條件內的評估。

0

您正在查找字符數組中的任何不同的字符。這也可以是感嘆號或冒號。

使用類似isalnum()isalpha()的東西不是更好嗎? 如果您正在查找數字(0-9)或Alpha字符(a-z或A-Z),則使用isalnum,否則使用isalpha。

char * pointerToFindFirstChar(char * description) 
{ 
    while(*description && !isalnum(*description)) 
     description++; 
    return description; 
} 

char * pointerToFindFirstChar(char * description) 
{ 
    while(*description && !isalpha(*description)) 
     description++; 
    return description; 
} 

它會增加,雖然一些開銷。此外,在這種情況下,需要檢查char數組的末尾。

另一種選擇是使用isspace()這將檢查任何空格字符。

請參閱這裏瞭解這些功能描述:http://www.java2s.com/Code/C/ctype.h/Catalogctype.h.htm