2012-05-24 84 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

相关问题