2010-12-08 3 views
0

comment cette ponctuation travail correcter :: si j'ai cette ligne:correcteur de ponctuation?

hi.how are u?i'm good;ok bye. 

le correcter devrait me donner cette ligne:

hi. How are u? I'm good; ok bye. 

comment ce travail: premier après tout {. ou ou ; ou ? } il devrait mettre un espace et capitaliser la lettre après?

en C

MISE À JOUR

#include<stdio.h> 
#include<string.h> 

#define LINE_LEN 300 

void strip(char *); 
char toCap(char); 
char toSml(char); 

int main(int argc, char *argv[]){ 
    char line[LINE_LEN]; 
    int counter = 0; 
    int line_length; 
    int i; 
    char outline[LINE_LEN]; 

    if(argv[1] == NULL){   //check if the file exists or not 
     printf("ERROR: FILE NOT FOUND!\n"); 
     return -1; 
    } 

    FILE *inp; 
    FILE *output; 
    inp = fopen(argv[1],"r"); 
    output = fopen("Clear_Data.txt","w"); 

    while(fgets(line,LINE_LEN,inp) != NULL){ 
     strip(line); 

     line_length = strlen(line); 

     for(i = 0; i < line_length ; i++) 
      line[i] = toSml(line[i]); 

     for(i = 0; i < line_length ; i++){ 
      if(line[i] == '.' || line[i] == ',' || line[i] == ';' || line[i] == '?'){ 
       if(line[i+1] == ' ') 
        outline[i+2] = toCap(line[i+2]); 
       else{ 
        outline[i+1] = ' '; 
        outline[i+2] = toCap(line[i+1]); 
       } 
       continue; 
      } 
      else 
       outline[i] = line[i]; 
     } 
     fprintf(output,"%s",outline); 
    } 
    fclose(inp); 
    fclose(output); 
    return 0; 
} 

void strip(char *str){  //remove extra whitespaces in a string 
    int r = 0; //next character to be read 
    int w = 0; // next character to be written 

    while(str[r]){ 
     if (str[r] == ' ' || iscntrl(str[r])){ 
     if (w > 0 && str[w-1] != ' ') 
      str[w++] = ' '; 
     } 
     else 
     str[w++] = str[r]; 
     r++; 
    } 
    str[w] = 0; 

    if(str[strlen(str) - 1] == ' ') 
     str[strlen(str) - 1] = 0; 

    printf("%s\n",str); 
} 

char toCap(char c){ 
    return (c - 32); 
} 

char toSml(char c){ 
    return (c + 32); 
} 

mais cela ne fonctionne pas d'aide maintenant ??

+2

Lorsque votre question est fermée, vous devez l'améliorer, et pas seulement la poster à nouveau. – ypnos

+0

j'ajoute quoi exactement ma question ,, pas seulement le poster encore, ce que vous avez besoin de plus je vais le mettre ,, ?? –

+0

Veuillez donner une explication plus claire. Oui, il devrait y avoir un espace après la ponctuation et mettre en majuscule la lettre après. Est-ce ce que vous voulez demander? –

Répondre

1

Votre problème n'est pas facile, car il y a un aspect sémantique, pas seulement un aspect syntaxique. Il tombe dans le domaine du traitement du langage naturel.

Il existe des outils pour des problèmes comme le vôtre; un list of them exists on Wikipedia, de sorte que vous pouvez les examiner un peu et voir si quelque chose vous ira.

Par ailleurs, ";" ne signifie pas automatiquement fin de la peine, si

;ok bye 

devrait se convertissent à

; ok bye 

à mon avis.

+0

regardez ma mise à jour :) –

+0

@Rami: vous venez de dire que cela ne fonctionnera pas. Pourquoi? Dites-nous quelques raisons, nous ne voulons pas deviner et rechercher des bogues dans votre code sans au moins un peu d'aide de votre part. – darioo

Questions connexes