Invert string message in c

Asked

Viewed 47 times

-1

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

int main ()
{
char palavra[256] = {0};
char mensagem [20][21] = {0}, mensagemInvertida [20] [21] = {0};
int numP = 0;
int i = 0, j = 0;
char erro = 0;

printf ("Insira a sua mensagem de ate 20 palavras: \n");
scanf ("%s",mensagem);

while(palavra[0] != '.' && numP < 20)
{
    gets(palavra);

    if(strlen(palavra) > 20)
    {
        erro = 1;
    }

strncpy(mensagem[numP], palavra, strlen(palavra));

    numP ++;
}

for(i = 0; i < numP; i++)
{
    for(j = 0; j < 20; j++)
    {
        if(mensagemInvertida [i] [j] != '.')
            mensagemInvertida[i][j] = mensagem[i][j];

    }
}

if (erro == 0)
{
    printf ("\nSua mensagem invertida e: ");
    for (i = 0; i < numP; i++)
    {
        if(mensagemInvertida [i][0] != '.')
            printf("%s ", mensagemInvertida[i]);
    }
}
else
{
    printf("Palavras com letras demais");
}


return 0;
}

I’m doing a code correction job, and I must invert a vector string, but I can’t go any further than that, I can only get to when the words are read and printed on the screen, but not reversed. Any idea what to do?

1 answer

0

Do you just want to invert a string, or 20 string’s ? , because in this code you put the scanf to pick up a string that is in a vector of 20 string’s and that can have a maximum of 20 characters each , but did not use any loop of repetition , so it will only take even a string , and since the scanf command only takes the characters typed on the keyboard until it finds a blank space, then it will only have a word of up to 20 characters , and the other vector named "word" is inside the while loop and picking up each phrase and putting it together , but does nothing else , and then being the message even though you want to reverse , then your code could be like this :

#include <stdio.h>
#include <string.h>
int main( )
{
    char palavra[256] = {0},aux[256];
    char mensagem [20][21] = {0}, mensagemInvertida [20][21] = {0};
    printf("mensagemInvertida -> %s\n",mensagemInvertida);
    int numP = 0;
    int i = 0, j = 0;
    char erro = 0;
    printf ("Insira a sua mensagem de ate 20 palavras: ");
    scanf ( "%s", mensagem[j] );      // mensagem é um vetor que pode armazenar
                                      // até 20 string's de 20 caracteres cada
                                      // assim precisa saber qual a posição desse vetor
                                      // e j informará tal posição , e scanf nesse caso
                                      // irá pegar os caracteres até encontrar um espaço
                                      // em branco , portanto apenas uma unica palavra
    fflush(stdin);
    setbuf(stdin,NULL);
    while( aux[0] != '.' && numP < 20)// aqui vai pegar até 20 palavras que tenha no
    {                                 // maximo 20 caracteres
        gets( aux );                  // gets está eliminada da linguagem  c  , só funciona em
                                      // compiladores do século passado
/*                                    // em compiladores do século passado , no lugar desse
                                      // " gets " ,  use o fgets , melhor que scanf , pois pega
                                      // todos os caraceres digitados e até o newLine
        if(strlen(palavra) > 20)      // if desnecessário , pois strlen (palavra)
                                      // nunca será maior que 20
        {
            erro = 1;
        }
*/
        //strncpy(mensagem[numP], palavra, strlen(palavra)); seria melhor usar strcat
        strcat( palavra, aux );       // adiciona a palavra 'aux' digitada na palavra frase
        strcat( palavra, " ");        // adiciona um espaço na frase depois dessa palavra inserida
        numP++;                       // incrementa o contador de palavras
    }

    printf("Sua MensaGem -> %s\n",mensagem[j]);// escreve a frase , apenas para verificação
    printf("Sua Frase ----> %s\n",palavra );// escreve a frase , apenas para verificação
    int tam = 0;
    while( mensagem[j][tam] )tam++; // vai do começo até encontrar um caractere que não seja espaço
    printf("tamanho da mensagem -> %d\n",tam);
    mensagemInvertida[j][tam] = '\0';
    int len = tam;
    tam--;
    for(i=0; mensagem[j][i] != '\0'; i++)
    {
        mensagemInvertida[j][tam] = mensagem[j][i];
        printf("%c",mensagemInvertida[j][tam]);
        tam--;
    }
    printf("\nString mensagemInvertida -> %s\n",mensagemInvertida[j]);
    i = 0;
    if (erro == 0)
    {
        printf ("\nSua mensagem invertida eh -------: %s\n",mensagemInvertida);
        printf ("Ou usando um laco de Repeticao\n\
               \rSua mensagem invertida pode ser -: ");
        for (i = 0; i<len; i++)
        {
            printf("%c", mensagemInvertida[j][i]);
        }
    }
    else
    {
        printf("Palavras com letras demais");
    }
    printf("\n\n\n");
    return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.