簡體   English   中英

從C中的char數組修剪空格

[英]Trimming blank spaces from a char array in C

我的char數組看起來像下面的樣子,

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];

請提出一個實現此目的的好方法,

最簡單的方法是使用正則表達式替換模式“ \\ 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);

此代碼很丑陋,聞起來很有趣:

#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      

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM