Jump to content

codigo sobre pegar string de um arquivo com varias strings e inverter e passar para outr


Recommended Posts

meu codigo pega apenas uma string de um arquivo e passa para outro arquivo invertida mas n pega varias strings de um arquivo separadas por \n e tambem deve usar aritmetica de ponteiros para manipular os vetores. ALguem pode ajudar?

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

void verifica (char txt[200], char aux[200], int b, char txt_orig[200]);
void criptografar(char txt[200],int b);

int main(){

        char txt[200],aux[200], txt_orig[200];
        int a,b;
        FILE *arqp, *arqp2;
        arqp = fopen("arqp.txt","r");
        if (arqp==NULL){
            printf("Deu erro");
            system("pause");
            exit(1);
        }
        arqp2 = fopen("arqp2.txt", "w+");


        printf("String original: ");

        while(!feof(arqp)){
            fgets(txt,200,arqp);
             b=strlen(txt);
             puts(txt);
             strcpy(txt_orig, txt);

            criptografar(txt,b);
              //fputs(arqp2,txt);
            }

        char* txt_novo = txt + 1;
        printf("\nString criptografada: %s", txt_novo);

        verifica(txt,aux,b,txt_orig);

        fclose(arqp);
        fclose(arqp2);
}
void criptografar(char txt[200],int b){

    char txaux;
    int i;

    for(i=0;i<b;i++){
        txaux=txt[i];
        txt[i]=txt[b];
        txt[b]=txaux;
        b--;
    }
}
void verifica (char txt[200], char aux[200], int b, char txt_orig[200]){
    int i;
    printf("\nString verificada: ");

    for(i=0;i<=b;i++){
       aux[i]=txt[i];
       txt[i]=txt[b];
       txt[b]=aux[i];
        b--;

    }

    printf("%s",txt);

    if (strcmp(txt_orig, txt) == 0)
        printf("\nAs frases estão iguais\n");
    else
        printf("\nAs frases estão diferentes\n");
}>

 

Link to post
Share on other sites
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void verifica ( char txt[200], char aux[200], int b, char txt_orig[200] );

void criptografar ( char txt[200], int b );

int main()
{
  char txt[200], aux[200], txt_orig[200];
  int a, b;    // FIXME: Onde é que esse 'a' é usado?
  FILE *arqp, *arqp2;

  arqp = fopen ( "arqp.txt", "r" );

  if ( arqp == NULL )
  {
    printf ( "Deu erro" );
    system ( "pause" );         // FIXME: Não use system()!
    exit ( 1 );
  }

  // FIXME: O arquivo de saída também pode não conseguir ser aberto!
  //        Onde está o teste?
  //        Aliás, você não o está usando abaixo!
  arqp2 = fopen ( "arqp2.txt", "w+" );

  printf ( "String original: " );

  // FIXME: feof() não faz o que você pensa que ele faz.
  //        feof() retorna um flag setado no stream DEPOIS
  //        que uma operação de leitura é feita!
  while ( !feof ( arqp ) )
  {
    // FIXME: fgets() também pode falhar!
    //        Ainda: Uma linha pode ter mais que 200 chars...
    fgets ( txt, 200, arqp );

    // FIXME: Uma linha lida de um arquivo termina com '\n' (exceto,
    //        talvez, a última linha - se não terminar com '\n').
    //        Isso está certo?
    b = strlen ( txt );

    // FIXME: puts() sempre imprime um '\n' extra.
    puts ( txt );

    strcpy ( txt_orig, txt );

    criptografar ( txt, b );

    // FIXME: Não era para gravar no outro arquivo?
    //fputs(arqp2,txt);
  }

  // FIXME: Porque à partir do 2º caracter?
  char *txt_novo = txt + 1;

  printf ( "\nString criptografada: %s", txt_novo );

  verifica ( txt, aux, b, txt_orig );

  fclose ( arqp );
  fclose ( arqp2 );
}

void criptografar ( char txt[200], int b )
{
  char txaux;
  int i;

  // FIXME: Note que b é o tamanho da string.
  //        Na primeira iteração o '\0' final da string é
  //        copiado no primeiro char do buffer.
  for ( i = 0; i < b; i++ )
  {
    txaux = txt[i];
    txt[i] = txt[b];
    txt[b] = txaux;
    b--;
  }
}

void verifica ( char txt[200], char aux[200], int b, char txt_orig[200] )
{
  int i;
  printf ( "\nString verificada: " );

  // FIXME: O mesmo problema acima.
  for ( i = 0; i <= b; i++ )
  {
    aux[i] = txt[i];
    txt[i] = txt[b];
    txt[b] = aux[i];
    b--;
  }

  printf ( "%s", txt );

  if ( strcmp ( txt_orig, txt ) == 0 )
    printf ( "\nAs frases estão iguais\n" );
  else
    printf ( "\nAs frases estão diferentes\n" );
}

 

Link to post
Share on other sites

Boa tarde. variavel a não precisou ser usada. É que a primeira questão pedia para inverter uma string criando uma função que faz isso e outra que verifica. Na segunda atividade é pra pegarmos isso de um arquivo e inverter e mandar pra outro. Só que poderá ser feito com mais de uma linha no arquivo(nessa logica que não consigo chegar) e um dos criterios é usar aritmetica de ponteiros. O segundo arq deveria ser criado, rodou certo no meu. O primeiro eu criei manualmente e joguei pra pasta onde estava o codigo acima. Esse meu código funciona para uma linha ou mais se não tiver \n porem não sei a logica para mais de uma linha separada por \n

6 horas atrás, fredericopissarra disse:

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

void verifica ( char txt[200], char aux[200], int b, char txt_orig[200] );

void criptografar ( char txt[200], int b );

int main()
{
  char txt[200], aux[200], txt_orig[200];
  int a, b;    // FIXME: Onde é que esse 'a' é usado?
  FILE *arqp, *arqp2;

  arqp = fopen ( "arqp.txt", "r" );

  if ( arqp == NULL )
  {
    printf ( "Deu erro" );
    system ( "pause" );         // FIXME: Não use system()!
    exit ( 1 );
  }

  // FIXME: O arquivo de saída também pode não conseguir ser aberto!
  //        Onde está o teste?
  //        Aliás, você não o está usando abaixo!
  arqp2 = fopen ( "arqp2.txt", "w+" );

  printf ( "String original: " );

  // FIXME: feof() não faz o que você pensa que ele faz.
  //        feof() retorna um flag setado no stream DEPOIS
  //        que uma operação de leitura é feita!
  while ( !feof ( arqp ) )
  {
    // FIXME: fgets() também pode falhar!
    //        Ainda: Uma linha pode ter mais que 200 chars...
    fgets ( txt, 200, arqp );

    // FIXME: Uma linha lida de um arquivo termina com '\n' (exceto,
    //        talvez, a última linha - se não terminar com '\n').
    //        Isso está certo?
    b = strlen ( txt );

    // FIXME: puts() sempre imprime um '\n' extra.
    puts ( txt );

    strcpy ( txt_orig, txt );

    criptografar ( txt, b );

    // FIXME: Não era para gravar no outro arquivo?
    //fputs(arqp2,txt);
  }

  // FIXME: Porque à partir do 2º caracter?
  char *txt_novo = txt + 1;

  printf ( "\nString criptografada: %s", txt_novo );

  verifica ( txt, aux, b, txt_orig );

  fclose ( arqp );
  fclose ( arqp2 );
}

void criptografar ( char txt[200], int b )
{
  char txaux;
  int i;

  // FIXME: Note que b é o tamanho da string.
  //        Na primeira iteração o '\0' final da string é
  //        copiado no primeiro char do buffer.
  for ( i = 0; i < b; i++ )
  {
    txaux = txt[i];
    txt[i] = txt[b];
    txt[b] = txaux;
    b--;
  }
}

void verifica ( char txt[200], char aux[200], int b, char txt_orig[200] )
{
  int i;
  printf ( "\nString verificada: " );

  // FIXME: O mesmo problema acima.
  for ( i = 0; i <= b; i++ )
  {
    aux[i] = txt[i];
    txt[i] = txt[b];
    txt[b] = aux[i];
    b--;
  }

  printf ( "%s", txt );

  if ( strcmp ( txt_orig, txt ) == 0 )
    printf ( "\nAs frases estão iguais\n" );
  else
    printf ( "\nAs frases estão diferentes\n" );
}

 

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...