2009-06-08 5 views
0

Mon tableau de caractères serait à la recherche quelque chose comme ci-dessous,Recadrage espaces vides à partir d'un tableau de caractères en C

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

où « - » égal à des espaces vides

Le tableau ci-dessus contient le code de commande (0 , 1, 2, 3 ..) tous les 20 caractères à partir de 0-ème place.

Je voudrais convertir le tableau de texte ci-dessus en dessous de format

Les espaces vides seront enlevés et un saut de ligne sera ajoutée à la fin de chaque ligne.

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

S'il vous plaît suggérer une bonne méthode pour mettre en œuvre,

+1

Il y a pas exactement vingt caractères entre chacun des nombres dans votre exemple ... – Stephan202

Répondre

1

la meilleure façon sera avec les expressions régulières pour remplacer modèle « \ s? » avec « \ n »

Si vous n'avez pas accès à une bibliothèque regex, vous pouvez faire quelque chose comme ça

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); 
+0

* Merci pour le conseil moulé malloc, je ne savais pas cela * Je fais sizof (char) parce que c'est une construction de compilation et n'a pas de temps d'exécution la performance a frappé de toute façon et je pense que c'est une bonne pratique. * J'aurais dû inclure "..." au-dessus de free() J'insiste sur le fait que Conv_arr est malloc-ed et devrait être libéré plus tard – oscarkuo

0

Ce code est laid et drôle d'odeur:

#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; 
} 

[[email protected]]$ ./t 
1first line text 
2second line text 
3third line 
4 
5fith line text  
Questions connexes