2013-06-27 2 views
0

목적의 텍스트 변환 : .txt 파일로 변환하는 간단한 코드를 만듭니다 :.txt 파일

마다 '나는', 'E', 'A', 'S'와 'O를 '을 각각'1 ','3 ','4 ','5 '및'0 '으로 변환합니다.

처음에는 아주 간단하게 만들었지 만 여러 줄의 텍스트는 처리 할 수 ​​없었습니다. 그래서 프레이즈와 행을 행렬로 처리하려고했지만 여전히 작동하게 만들 수는 없습니다. 코드는 다음과 같습니다.

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

int main() 
{ 
    FILE *arquivo; 
    char frase[100][100]; 
    int i = 0; 
    int j = 0; 

//adress of the initial text file 
arquivo = fopen("C:\\Users\\xand\\Desktop\\ex1.txt", "r"); 

    //transfering every line of the file into a matrix 
    while (!feof(arquivo)) 
    { 
     fgets(frase[100][i],100, arquivo); 
     i++; 
    } 

    fclose(arquivo); 

//converting the letters to numbers 
for(j = 0; j < 100; j++) 
{ 
    while(frase[i][j] != '\0') 
    { 
     if(frase[i][j] == 'i' || frase[i][j] == 'I') 
     { 
      frase[i][j] = '1'; 
     } 
     if(frase[i][j] == 'e' || frase[i][j] == 'E') 
     { 
      frase[i][j] = '3'; 
     } 
     if(frase[i][j] == 'a' || frase[i][j] == 'A') 
     { 
      frase[i][j] = '4'; 
     } 
     if(frase[i][j] == 's' || frase[i][j] == 'S') 
     { 
      frase[i][j] = '5'; 
     } 
     if(frase[i][j] == 'o' || frase[i][j] == 'O') 
     { 
      frase[i][j] = '0'; 
     } 

    i++; 
    } 
} 

    arquivo = fopen("ex1 criptografado.txt", "w"); 

//here is where I believe to be the problem 
//It doesn't even create the new file. Im not sure if using matrix is the ideal solution to fprintf a multi-lined text to a file 
for(j = 0; j < 100; j++) 
{ 
    i = 0; 
    while(frase[i][j] != '\0') 
    { 
     fprintf(arquivo, "%s", frase[i][j]); 
     i++; 
    } 

    fprintf(arquivo, "\n"); 
} 

    fclose(arquivo); 



    return 0; 
} 

코드는 컴파일되지만 실행하려고하면 충돌합니다. 누구든지이 문제에 대한 해결책을 도울 수 있습니까?

+1

['이 매트릭스는 당신을 ... 흰 토끼를 따르라. '] (http://www.youtube.com/watch?v=Smwrw4sNCxE) – jxh

답변

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

int main() 
{ 
    FILE *f, *g; 
    int c; 

    if ((f = fopen("asdf.txt", "r")) == NULL) { 
     perror("fopen"); 
     exit(1); 
    } 
    if ((g = fopen("asdf1.txt", "w")) == NULL) { 
     perror("fopen"); 
     exit(1); 
    } 

    while ((c = fgetc(f)) != EOF) { 
     switch (c) { 
     case 'i': 
     case 'I': 
      fputc('1', g); 
      break; 
     case 'e': 
     case 'E': 
      fputc('3', g); 
      break; 
     case 'a': 
     case 'A': 
      fputc('4', g); 
      break; 
     case 's': 
     case 'S': 
      fputc('5', g); 
      break; 
     case 'o': 
     case 'O': 
      fputc('0', g); 
      break; 
     default: 
      fputc(c, g); 
      break; 
     } 
    } 

    fclose(f); 
    fclose(g); 

    return 0; 
} 

코드가 수정되었습니다. 주로 사용되지 않는 모든 행에 '\ 0'을 추가하고 행 끝에 '\ n'을 인쇄하지 않고 fgets에 의해 문자열에 넣기 때문에 frase[j][i]frase[i][j]으로 바꾸고 실제 충돌은 fprintf(arquivo, "%s", frase[i][j]) 대신으로 바꿉니다.

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

int main() 
{ 
    FILE *arquivo; 
    char frase[100][100]; 
    int i = 0; 
    int j = 0; 

    //adress of the initial text file 
    arquivo = fopen("C:\\Users\\xand\\Desktop\\ex1.txt", "r"); 

    //transfering every line of the file into a matrix 
    while (!feof(arquivo)) { 
     fgets(frase[i], 100, arquivo); 
     i++; 
    } 
    for (; i < 100; i++) { 
     frase[i][0] = '\0'; 
    } 

    fclose(arquivo); 

    //converting the letters to numbers 
    for (j = 0; j < 100; j++) { 
     i = 0; 
     while (frase[j][i] != '\0') { 
      if (frase[j][i] == 'i' || frase[j][i] == 'I') { 
       frase[j][i] = '1'; 
      } 
      if (frase[j][i] == 'e' || frase[j][i] == 'E') { 
       frase[j][i] = '3'; 
      } 
      if (frase[j][i] == 'a' || frase[j][i] == 'A') { 
       frase[j][i] = '4'; 
      } 
      if (frase[j][i] == 's' || frase[j][i] == 'S') { 
       frase[j][i] = '5'; 
      } 
      if (frase[j][i] == 'o' || frase[j][i] == 'O') { 
       frase[j][i] = '0'; 
      } 

      i++; 
     } 
    } 

    arquivo = fopen("ex1 criptografado.txt", "w"); 

    for (j = 0; j < 100; j++) { 
     i = 0; 
     while (frase[j][i] != '\0') { 
      fprintf(arquivo, "%c", frase[j][i]); 
      i++; 
     } 
    } 
    // or simpler: 
    // for (j = 0; j < 100; j++) 
    //  fprintf(arquivo, "%s", frase[j]); 

    fclose(arquivo); 

    return 0; 
} 
0

Logic에서 매트릭스를 사용하는 데 문제가 있다고 생각합니다. 문자열을 가져 와서 모든 문자를 비교할 수 있습니다. - 원하는 문자 (변경해야하는 문자) 인 경우 Number로 문자를 변경하고 문자를 쓰면 문자를 변경하십시오. 자세한 내용은 fputc 참조를 참조하십시오.

편집 :

가 @ctn하여 답변을 참조하십시오 - 자신의 코드가 좋은 예입니다.