2012-05-24 85 views
2

如何從該數組中的每個字符串中刪除'\ n'?從二維數組中的字符串中刪除最後一個字符

我知道我可以爲一個簡單的C字符串做這樣的事情,但我失敗了,在這種情況下使用它

cmd[strcspn(cmd, "\n")] = '\0'; 

我也是不知道這將是propper方式或不。

字符串不會在中間包含任何空格或\ n。它們也是一個靜態長度(6)。

#include <stdlib.h> 

unsigned char cmd[][6] = { 
    {"r123\n"}, 
    {"r999\n"}, 
    {"l092\n"}, 
    {"l420\n"}}; 

void main(void) { 
    int i; 

    for(i = 0; i < (sizeof(cmd)/sizeof(cmd[0])); i++) { 
     printf("%s\n", cmd[i]); 
    } 
} 
+0

您的解決方案非常好 – Nicoretti

+1

您應該提供更多信息以獲得更有用的答案。這些字符串的長度是否總是5(用''\ 0''6)?如果它在這個字符串的中間,你還想刪除'\ n'嗎? ... – LihO

+0

我同意LihO。如果你想爲這個問題提供一個通用的解決方案,你應該這樣說。另一方面,如果你想要一個適用於特定情況的解決方案(例如,總是5個字符串,總是長度5,...),那麼你應該指定細節,以便我們知道我們可以使用什麼。 – penelope

回答

2

只需手工操作,非常簡單!

如果它保證只有在每一個字的最後一個字符,它的保證是有,不是像這樣:

for (i = 0; i < elem_number; ++i){ 
    cmd[i][strlen(cmd[i])-1] = 0; 
} 

如果,另一方面,你不能確定有多少空格字符有將在年底,但你知道,他們只會在那裏結束(有可能是0在這種情況下!)比這

for (i = 0; i < elem_number; ++i){ 
    for (j = 0; cmd[i][j] != 0; ++j){ 
     if (isspace(cmd[i][j])) 
      cmd[i][j] = 0; 
    } 
} 

瞧!

如果中間會出現空白,那麼您必須定義所需的行爲:只剪切尾隨的空格,剪切很多小的字符串或完全不同的字符串。

呵呵,另一個旁註: 其他人似乎都在用char = '\0'。在C'\0' and 0是等同的,即if ('\0' == 0) { ... }評估爲真。

旁註2:我使用了elem_number,因爲我不知道元素的數量是否是參數或硬編碼/事先知道。用適當的替代品。

+1

雖然''\ 0''和'0'相等,你應該在這種情況下使用''\ 0''。用''\ 0''你明確地說「我在這裏使用終止NULL字符。」 – LihO

+1

我認爲這是平常的知識,它現在有更多的個人風格選擇。 – penelope

1

將字符數組中的字符設置爲\0將截斷該字符處的字符串。 所以在你的例子中設置第5個字符將完成這項工作。

cmd[i][4] = '\0'; 

如果預期的字符串可以小於4長的話就不要硬編碼到4而是strlen(cmd[i])-1

+0

,似乎挺快速的:D –

0

也許你可以使用strrchr?如果字符串可能包含多個換行符,則在循環中使用。

-1
for(i = 0; i< sizeof(cmd)/sizeof(unsigned char[6]);i++) 
     *strchr(cmd[i], '\n') = '\0'; 
+0

這是一個非常規解決方案,其字符串長度是硬編碼的,沒有任何書面解釋的準確意義。另外,Q作者似乎有點缺乏經驗,我不認爲他會在沒有解釋的情況下利用可複製的解決方案獲益太多。 – penelope

+0

這應該是! 非常感謝! –

+0

「字符串長度硬編碼」? – BLUEPIXY

相關問題