Ir para conteúdo

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


Gabriel Lemos

Posts Recomendados

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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...