2011-04-22 13 views
0

我有一個名稱,姓氏,地址的結構列表...所有輸入到單獨的CHAR字符串中。 問題是每當我粘貼其中一個字符串時,我也會收到大量的空白。 例如,對於名稱和姓氏字符串,我得到: 布蘭妮.................................. ..........約翰遜................................... (點代表在每個字符串的結尾)在字符串(指針)後面刪除空格

下面的空格字符是我的代碼:

void table_names (void) 
{ 
ADDRESS *tmp_ptr; 
printf ("All names in address book:\n"); 
tmp_ptr= hol; 
printf(" ______________________________\n"); 
printf("| FIRST NAMES | LAST NAMES |\n"); 
printf("|________________|_____________|\n"); 
while(tmp_ptr!=NULL) 
    { 
    printf ("%s%s",tmp_ptr->name,tmp_ptr->lname); 
    tmp_ptr= tmp_ptr->next; 
    } 
} 

如何擺脫空白的任何幫助嗎?

+0

您沒有提供足夠的信息。 「ADDRESS」的外觀如何,其內容如何設置? – 2011-04-22 18:49:05

回答

1

我假設你粘貼的意思是顯示。

隨着這一假設,我們還假定每當形成tmp_ptr->名和tmp_ptr-> L-NAME,其整個緩衝器充滿空間和僅在端部有一個NUL終止子('\0')。

無論創建哪些內容,都需要通過在所有空白處首先放置一個來刪除所有額外的空白。一個聰明的方法可能是倒退,以允許名稱空間。

int i; 

for (i = BUFFER_LENGTH - 1; i > -1; --i) 
{ 
    if (value[i] != ' ') 
    { 
     if (i + 1 != BUFFER_LENGTH) 
     { 
      value[i + 1] = '\0'; 
     } 
     break; 
    } 
} 

這可能與原始指針來完成,以及,它假定這是通過類似於函數傳遞:

void rtrim(char *value, const int BUFFER_LENGTH); 
0

要打印照片,無需尾隨空格,使用格式.*sstrcspn()

.*s需要int值作爲要打印的最大數量char
strcspn(s," ")計算不包含' '的初始前綴的長度。

不需要修改s。這種方法不起作用,如果空間發生的姓氏。

int main(void) { 
    const char *s = "Johnson  "; 
    printf("'%.*s'\n", (int) strcspn(s, " "), s); 
    return 0; 
} 

'約翰遜

否則,它是更多的工作。搜索最後的' ',如果有的話。

int main(void) { 
    const char *s = "Johnson Smith "; 
    size_t len = strlen(s); 
    while (len > 0 && s[len-1] == ' ') { 
    len--; 
    } 
    printf("'%.*s'\n", (int) len, s); 
    return 0; 
} 

'約翰遜史密斯