代码之家  ›  专栏  ›  技术社区  ›  Thi

在C中修剪char数组中的空格

  •  0
  • Thi  · 技术社区  · 17 年前

    Org_arr[1first line text------2second line text----3third line-------4--------------------5fith line text------];
    

    其中“-”等于空格

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

    我想将上述文本数组转换为以下格式,

    Conv_arr[1first line text/n2second line text/n3third line/n4/n5fith line text/n];
    

    请建议一个好的方法来实现这一点,

    2 回复  |  直到 14 年前
        1
  •  1
  •   oscarkuo    17 年前

    最简单的方法是使用正则表达式将模式“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);
    
        2
  •  0
  •   Sinan Ünür    17 年前

    #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