2013-01-13 53 views
2

在我的C程序中,我創建了一個字符數組一樣char read_str[MAX_ALLOWED_BUFFER];。 有了這個數組,我該如何從左側和右側修剪空白和換行符。 這不是一個指針,所以我不知道如何擺脫尾隨的字符。 任何人都可以幫忙嗎?如何修剪字符串格式char []?

char read_str[MAX_ALLOWED_BUFFER]; 
FILE *fp; 
fp = fopen(argv[1],"r"); 
fgets(read_str, MAX_BUFFER, fp); 
// how to trim read_str ? 
+0

看到這個:我如何修剪引導/標準方式尾隨空白?(HTTP ://stackoverflow.com/q/122616/814702) – informatik01

+0

而獲得的一個指針數組read_str很簡單:'的char * p = read_str;' – informatik01

回答

4

你需要從那裏確定的第一個非空白字符,然後複製值到數組的開始。然後您需要識別最後一個非空白字符,然後在其後創建一個新的空終止符字符。

請注意,你不會真正刪除或移除任何東西,你只是改變你的陣列中的字符值。

您可能會發現一些有用的從C標準庫中的字符串處理函數;這裏是他們的列表:http://en.cppreference.com/w/c/string/byte

2

要結束脩剪空白,只是在適當的地方寫一個0。字符串處理函數將其解釋爲字符串的結尾。要從頭開始刪除空格,最簡單的方法是在數組中使用指針並讓它指向第一個非空白字符。但您也可以將字符移動到數組的開頭,例如與memmove

+0

如何爲一個字符指針工作[]類型?如果我得到一個char [],我怎麼能從中得到一個指針,然後使用類似pt ++的方式改變指針的值,然後重新指定char []變量的指針?我在這裏有點困惑......(我也修改了我的第一篇文章) – omega

+0

我的意思是使用'char *',像'char * str_ptr =&read_str [k];',然後傳遞'str_ptr'而不是'read_str'。然後你不需要移動。如果這不是一件好事,無論出於何種原因,那麼你必須移動'char'。 –

+0

我仍然困惑在這裏,什麼k應該是? – omega

1

一個辦法是分配一個第二串並處理第一進入第二...

#include <stdio.h> 
#include <string.h> 

#define MAX_ALLOWED_BUFFER 100 

char read_str[MAX_ALLOWED_BUFFER] = " a core string  "; 
char result[MAX_ALLOWED_BUFFER]; 

int main(void) { 
    char *t; 

    read_str[MAX_ALLOWED_BUFFER - 1] = '\0'; // not needed here but wise in general 
    // trim trailing space 
    for(t = read_str + strlen(read_str); --t >= read_str;) 
    if (*t == ' ') 
     *t = '\0'; 
    else 
     break; 
    // trim leading space 
    for(t = read_str; t < read_str + MAX_ALLOWED_BUFFER; ++t) 
    if(*t != ' ') 
     break; 
    strcpy(result, t); 
    printf("got <%s>\n", result); 
    return 0; 
}