【问题标题】:Trimming blank spaces from a char array in C从C中的char数组中修剪空格
【发布时间】:2009-06-08 21:40:33
【问题描述】:

我的 char 数组如下所示,

org_arr[1第一行文字-----2第二行文字----3第三行--------4--------5第五行文本 - - - ];

其中 '-' 等于空格

上面的数组包含从第 0 位开始每 20 个字符后的控制代码(0, 1, 2, 3..)。

我想把上面的文本数组转换成下面的格式,

将删除空格,并在每行末尾添加换行符。

conv_arr[1第一行文字/n2第二行文字/n3第三行/n4/n5第五行文字/n];

请提出一个好的方法来实现这一点,

【问题讨论】:

  • 在您的示例中,每个数字之间不完全是 20 个字符...

标签: c arrays string text


【解决方案1】:

最简单的方法是使用正则表达式替换模式“\s?”用“\n”

如果您无权访问正则表达式库,您可以这样做

int print_line_break = 1;
char* Conv_arr = (char*)malloc(sizeof(char) * strlen(Org_arr) + 1);

for(char* c=Org_arr; *c; ++c) {
   if (*c == ' ') {
      *(Conv_arr++) = *c;
      print_line_break = 1;
   } else {
      // only print 1 '\n' for a sequence of space
      if (print_line_break) {
         *(Conv_arr++) = '\n';
         print_line_break = 0; 
      }
   }
}

free(Conv_arr);

【讨论】:

  • * 感谢 malloc cast 提示,我不知道这个 * 我做 sizof(char) 因为它是一个编译时构造,并且无论如何都不会影响运行时性能,我认为它是好习惯。 * 我应该在 free() 上方包含“...” 我只是强调 Conv_arr 是 malloc-ed 并且应该稍后释放
【解决方案2】:

这段代码很丑,闻起来很有趣:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int c;
    char *src, *tgt;
    char mystr[] = "1first line text      "
        "2second line text    "
        "3third line       "
        "4                    "
        "5fith line text      ";

    char *cur = mystr;
    char *prev = NULL;

    while ( ( c = *cur++ ) ) {
        if ( c != ' ' && *cur == ' ' ) {
            prev = cur;
            continue;
        }
        if ( c == ' ' && isdigit(*cur) ) {
            *prev++ = '\n';
            src = cur;
            tgt = prev;
            while ( ( *tgt++ = *src++ ) );
            cur = prev;
        }
    }

    puts( mystr );
    return 0;
}

[sinan@archardy]$ ./t
1first line text
2second line text
3third line
4
5fith line text      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2010-12-05
    相关资源
    最近更新 更多