Ir ao conteúdo
  • Cadastre-se

C Não consigo resolver sobre Strings em C


Dan Azevedo

Posts recomendados

1) Faça um programa que receba uma string digitada pelo usuário, inverta os caracteres dessa string e imprima a string invertida. Por exemplo, se a string informada for “ROMA”, deve ser retornada a string “AMOR”.

2) Implemente um algoritmo que leia uma string s, um caracter chAtual, um caracter chNovo e substitua todo caracter chAtual de s pelo chNovo. O programa deve retornar também o número de substituições.

Exemplo:

String s informada pelo usuário: ESTE TEXTO AQUI

chAtual = E

chNovo = U

Saída do algoritmo:

USTU TUXTO AQUI

Número de substituições: 3

Link para o comentário
Compartilhar em outros sites

Imagine. Mas como o mongo novato, apaguei tudo. O jeito é refazer. Aí, posto aqui. kkk valeu man.

adicionado 5 minutos depois

Da uma olhada por favor?

Em sequencia o número 1 e o 2.

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

int main ( )
{

	Setlocale (LC_ALL, Portuguese”);
	
	Int i, cont=0;
	char strL1[30]; strL2[30], *stringL;

	printf (“String: “);
	gets (strL1);
	stringL = strL1;
	printf (“\n”);
	for (i = strlen(stringL); i>= 0; i--){
		printf (“%c”, strL1[i]);
	}

	Return (0);
}

e
 

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

int main ( )
{

	Setlocale (LC_ALL, Portuguese”);

	int i, cont=0;
	char strL[30], str1[1] = e”, str2[1] = u”, *stringL;

	stringL = strL; 
	
printf (“String: “);
gets (strL);
printf (“Saída: “);	
for (i = 0; < strlen(stringL); i++){

	if (strL[i] == str1[0]){
	  strL[i] = str2[0]);
	  cont++;
	}
	printf (“%c”, strL[i]);

}
printf  (“\n Substituição: %d, cont);

return (0);

}

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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

int main(){
    int i,cont=0,op;
    char chAtual[3],chNovo [3],nome[30], *nome2;
    
	printf("Entre com a string: ");
    gets (nome);
    
    printf("Digite 1 para ver a string ao contrario ou\n");
    printf("Digite 2 para substituir uma letra da string\n");
    scanf("%d",&op);
    switch (op){
    	case 1:
    nome2 = nome;
    for (i=strlen(nome2);i>=0;i--){
    printf("%c", nome[i]);
    }		
    break;
    	case 2:
    printf("\nDigite a letra que vai querer substituir: ");
    scanf ("%s",chAtual);
    printf("Digite a letra que vai colocar no lugar dela: \n");
    scanf ("%s",chNovo);
    for (i =0; i < strlen(nome); i++){
      if (nome[i] == chAtual[0]){
       nome[i] = chNovo [0];
       cont++;
      }
      printf ("%c", nome[i]);
     }
     printf ("\nSubstituicoes: %d", cont);
    break;
	}
    
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@DAMS e @herbertbahia. Alguns ponto importantes;

  1. são 2 programas separados, ou seja: 2 códigos;
  2. o enunciado precisa ser seguido (é um contrato).
    Sobre:
    2 horas atrás, DAMS disse:

    1) Faça um programa que receba uma string digitada pelo usuário, inverta os caracteres dessa string e imprima a string invertida. Por exemplo, se a string informada for “ROMA”, deve ser retornada a string “AMOR”.


    O enunciado pede que "inverta os caracteres dessa string e imprima a string invertida", o que é diferente de "apenas imprimir o inverso na tela". Primeiro inverte, depois imprime o resultado. O código do @herbertbahia não está seguindo isso;

    obs.: se fosse apenas para imprimir invertido, poderia utilizar a própria variável para pegar o tamanho. E no caso, o enunciado quer que inverta a própria variável, e não "gerar uma nova invertida".

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pode usar essas funções:

/**
 * Inverte a palavra fornecida.
 *
 * @param palavra Palavra que sera invertida.
 * @param tamanho Quantidade de caracteres da palavra.
 *
 * @return Palavra com os caracteres invertidos.
 */
char *inverter(const char *palavra, int tamanho) {
    char *palavraInvertida = malloc(tamanho * sizeof(char));

    for (int i = 0; palavra[i] != '\0'; ++i, --tamanho) {
        palavraInvertida[tamanho - 1] = palavra[i];
    }

    return palavraInvertida;
}

/**
 * Substitui os caracteres da palavra informada.
 * 
 * @param palavra        Palavra para ser processada.
 * @param caracterAntigo Letra a ser substituida.
 * @param caracterNovo   Letra que ira repor a letra antiga.
 *
 * @return Palavra com os caracteres substituidos.
 */
char *substituir(char *palavra, char caracterAntigo, char caracterNovo) {
    for (int i = 0; palavra[i] != '\0'; ++i) {
        if (palavra[i] == caracterAntigo) {
            palavra[i] = caracterNovo;
        }
    }

    return palavra;
}

Obs.: Para usar a função inverter é necessário incluir a biblioteca string.h.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@AdrianoSiqueira, continua com o mesmo problema: 

 

O enunciado indica que quer que inverta a string, e não obter o inverso dela!

 

O mesmo vale para a substituição.. creio eu (não entendo muito de C) que você está até alterando a palavra origina, mas também está retornando um valor... estaria "retornando" uma palavra invertida, invés de apenas substituir a palavra original.

 

Creio que ambas as funções seriam void.

 

Link para o comentário
Compartilhar em outros sites

void InvertePalavras(char *str){
    register unsigned char qtdePalavras = 1, i, j, k = 0, l, aux;

    for(l = 0; str[l] != '\0'; l++)
        qtdePalavras += (str[l] == ' ') ? 1 : 0;

    do{
        if(qtdePalavras == 1){
            for(j = k, --l; l > j; l--, j++)
                aux = str[j], str[j] = str[l], str[l] = aux;
        }else{
            for(j = i = k; str[i] != ' '; i++);
            k = i + 1;
            for(--i; j < i; i--, j++)
                aux = str[j], str[j] = str[i], str[i] = aux;
        }
    }while(--qtdePalavras);
}

 

Link para o comentário
Compartilhar em outros sites

22 minutos atrás, Simon Viegas disse:

seria inversão da string, e não das "palavras contidas nela".

essa biblioteca assert tem coisas muito boas.#include<assert.h>

Citação

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

int main() {
	char str[200];
    printf("Entre com a string: ");
    gets (str);
    char temp;
    int i, j;

    i = 0;
    j = strlen(str) - 1;

    while (i < j) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }
    printf("%s",str);

    return (0);
}

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, DAMS disse:

1) Faça um programa que receba uma string digitada pelo usuário, inverta os caracteres dessa string e imprima a string invertida. Por exemplo, se a string informada for “ROMA”, deve ser retornada a string “AMOR”.

2) Implemente um algoritmo que leia uma string s, um caracter chAtual, um caracter chNovo e substitua todo caracter chAtual de s pelo chNovo. O programa

 

Esse enunciado não é assim o máximo em objetividade, já que o item 2 começa falando em algoritmo e depois em programa, mas fica definido que são dois programas, afinal está escrito lá.


Se fossem 2 funções provavelmente no mundo C a gente declararia 

char* inverte(char* origem, char* saida);
char* troca(char c, char* origem);

contrariando a ideia de @Simon Viegas
 

48 minutos atrás, Simon Viegas disse:

Creio que ambas as funções seriam void.

 

porque usar void não acrescenta nada, mas retornar o endereço da string resultante permite usar o valor em expressões.

 

É o que faz a maioria das funções em stdlib por exemplo. 

 

Retornando char* eu posso escrever 
 

    printf("a string [%s] invertida: [%s]\n", entrada, inverte(entrada,saida));

Em termos mais próximos de C++: é preferível um rvalue e não um lvalue porque um lvalue não pode aparecer em uma expressão e assim fica limitante.

 

veja fgets() por exemplo:

    char *fgets(char *str, int n, FILE *stream)

Não estou recomendando, mas assim se pode escrever

    char    saida[40];
    char *p =  saida;
    printf("a string [%s] invertida: [%s]\n", entrada, inverte(fgets(entrada,30,stdin),saida));

Que lê a string, inverte e coloca o resultado na saída e o programa continua.

 

De volta a o tópico:

 

Veja a saída do programa que claro vou deixar aqui embaixo. As mensagens talvez já digam o suficiente:

Entrada: 'Roma'
string[0] = 'R'
string[1] = 'o'
string[2] = 'm'
string[3] = 'a'

E string[4] = 0 o numero, zero
E a string invertida vai ter o mesmo tamanho
E terminar com o mesmo zero
Mas vai comecar onde a primeira terminou
Entrada foi de entrada[0] ate entrada[3]
E invertida vai comecar em entrada[3] e terminar em entrada[0]
Nada mais: um unico loop, mas DOIS indices

Saida: 'amoR'
saida[0] = 'a'
saida[1] = 'm'
saida[2] = 'o'
saida[3] = 'R'
E saida[4] = 0 o numero, zero

O que esse exercício quer é mostrar ou avaliar uma entre duas coisas:

  • o uso de dois índices para criar um valor
  • o uso de uma estrutura de dados para inverter uma série

Como o exercício é muito simples, os valores já vem na string arrumadinhos um depois do outro com um zero no final, então apenas o caso um vale a pena. Depois do  vou mostrar o outro lado, o que usaríamos se fosse por exemplo o resultado de analisar algo como um texto e ir guardando certas ocorrências para depois mostrar. Aqui não se justifica.

 

Os dois índices:
 

Então, pensando na string 'Roma' que vai "de 'R' até 'a', de 0 a 3: o valor invertido vai ter o mesmo tamanho, e vai de 'a' a 'R', de 3 a 0. Os mesmos valores, uma única vez cada um. Então o simples é um loop com os dois índices, e uma maneira linear de escrever seria


    saida[limite] = 0; // vai ter o mesmo tamanho
    for (
        int indice_entrada = limite - 1, indice_saida = 0;
        indice_entrada >= 0;
        indice_entrada = indice_entrada - 1, indice_saida = indice_saida + 1)
    {
        saida[indice_saida] = entrada[indice_entrada];
    };  // for()

Onde as variáveis tem os óbvios usos:

  • limite é o fim da string, igual nas duas
  • indice_entrada e indice_saida são isso
  • entrada e saida são o óbvio

O programa de teste

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

int main()
{
    char    entrada[32];
    char    saida[31];

    printf("\nEntrada: ");
    fgets(entrada, 30, stdin);

    char limite = strlen(entrada) - 1;
    entrada[limite] = 0;
    printf("\nEntrada: '%s'\n", entrada);
    for (int i = 0; i < limite; i += 1)
    {
        printf("string[%d] = '%c'\n", i, entrada[i]);
    };  // for()
    printf("\nE string[%d] = %d o numero, zero\n", limite, entrada[limite]);
    printf("E a string invertida vai ter o mesmo tamanho\n");
    printf("E terminar com o mesmo zero\n");
    printf("Mas vai comecar onde a primeira terminou\n");
    printf("Entrada foi de entrada[%d] ate entrada[%d]\n", 0, limite - 1);
    printf("E invertida vai comecar em entrada[%d] e terminar em entrada[%d]\n", limite - 1, 0);
    printf("Nada mais: um unico loop, mas DOIS indices\n");

    // entao

    saida[limite] = 0; // vai ter o mesmo tamanho
    for (
        int indice_entrada = limite - 1, indice_saida = 0;
        indice_entrada >= 0;
        indice_entrada = indice_entrada - 1, indice_saida = indice_saida + 1)
    {
        saida[indice_saida] = entrada[indice_entrada];
    };  // for()

    printf("\nSaida: '%s'\n", saida);
    for (int i = 0; i < limite; i += 1)
    {
        printf("saida[%d] = '%c'\n", i, saida[i]);
    };  // for()
    printf("E saida[%d] = %d o numero, zero\n", limite, saida[limite]);

    return 0;
}

E um pouco mais simples de ler que o exemplo clássico usando while

while (i < j) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }

de @herbertbahia

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
47 minutos atrás, arfneto disse:

Se fossem 2 funções provavelmente no mundo C a gente declararia 


char* inverte(char* origem, char* saida);
char* troca(char c, char* origem);

contrariando a ideia de @Simon Viegas

 

@arfneto, entendo e estou aberto para as argumentações, mas não concordo... continuo achando que é para inverter a própria string... e não "obter um inverso da string". Inverter algo é uma coisa. Já ter o correspondente a o algo invertido, é uma coisa distinta. A partir do momento que tem duas strings, trataria-se de outro algoritmo... um outro problema...

 

Sobre:

55 minutos atrás, arfneto disse:
3 horas atrás, Simon Viegas disse:

Creio que ambas as funções seriam void.

porque usar void não acrescenta nada, mas retornar o endereço da string resultante permite usar o valor em expressões.

 

O cerne aqui seria o entendimento do enunciado (que entendi de outra forma) e implementar uma função que correspondesse a tal... no caso, como estou supondo/propondo que o tratamento deve ser na própria string, o uso do void seria em relação ao não uso do retorno para a funcionalidade, ou seja: se tiver retornando o resultado, automaticamente deixaria de ser a própria string. Não entendo muito dessa parte de ponteiro, mas poderia não ser um void se estivesse ordenando a mesma variável e no retorno também fosse passado o ponteiro para própria variável que foi passada (não sei se seria possível, mas acho que deu para entender). Ou ainda poderia não ser void se tivesse retornando qualquer outra coisa que não seja uma nova string.

 

A questão toda é que teria que trabalhar apenas com a variável da string original.

 

São 3 etapas básicas:

7 horas atrás, DAMS disse:

1) Faça um programa que [1] receba uma string digitada pelo usuário, [2] inverta os caracteres dessa string e [3] imprima a string invertida.

 

O [3] é o mais claro... devem-se usar a própria string. O [2] corrobora com a minha vertente, pois caso contrário nem precisaria existir.

 

Aqui sim:
 

44 minutos atrás, arfneto disse:

um pouco mais simples de ler que o exemplo clássico usando while


while (i < j) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }

 

Estaria pegando a própria string e "invertendo a ordem dos caracteres". É isso que eu me refiro. O cerne não é o resultado, mas meio para chegar a ele. O interessante do problema seria descobrir como inverter uma própria string (no caso do usuário entender que poderia precisar de uma variável temporária e como saber como definir as coordenadas correspondentes).

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, Simon Viegas disse:

continua com o mesmo problema: 

O enunciado indica que quer que inverta a string, e não obter o inverso dela!

No meu entendimento é a mesma coisa. Se eu tenho uma string e tenho que invertê-la, significa que o novo valor deve vir de, ou ir para algum lugar. A minha função realiza as duas tarefas.

 

Se quiser que a string invertida seja salva em outro lugar, faça assim:

stringInvertida = inverter(string, tamanho);

Se quiser que a string invertida fique na mesma variável, é só fazer assim:

string = inverter(string, tamanho);

Se não quiser armazenar e imprimir direto, faça assim:

printf("Inverso de '%s' e '%s' \n", string, inverter(string, tamanho));

Pelo que eu entendo esse é o princípio de funcionamento das funções: receber, processar, devolver.

Entendo que há situações onde não é preciso retornar valor algum, mas sinceramente acredito que não é o caso desse exercício...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Eu pensei nisso também:

1 minuto atrás, AdrianoSiqueira disse:

Se quiser que a string invertida fique na mesma variável, é só fazer assim:


string = inverter(string, tamanho);

 

mas seria uma "burlação" do que foi pedido... seria válido? acho que sim! "professor(a), eu inverti a própria string. Foi isso que você pediu". Seria como está estudando laços de repetição e num exercício pedir para imprimir a sequência de uma a 10 e a fazer isso:

printf("1, 2, 3, 4, 5, 6, 7, 8, 9 e 10");

É implícito que precisaria gerar a sequência utilizando um laço... "ah! então poderia fazer assim:".

do {
  printf("1, 2, 3, 4, 5, 6, 7, 8, 9 e 10");
} while (1 = 0) //ou 1==0, não lembro o correto agora, rs

Sacou? estou utilizando um laço de repetição e estou mostrando a sequência. Seria válido? acho que não! consideraria interessante? com certeza!

 

Como citado, a questão não é o resultado, mas o meio. Entendo que o enunciado indica que quer que faça o processo na string em si, como no último código que citei por última na postagem anterior.

 

Sobre:

4 minutos atrás, AdrianoSiqueira disse:

Pelo que eu entendo esse é o princípio de funcionamento das funções: receber, processar, devolver.

Entendo que há situações onde não é preciso retornar valor algum, mas sinceramente acredito que não é o caso desse exercício...

 

Perceba que o exercício não é sobre funções... mas sim sobre as "técnicas de programação" mesmo. O que estamos "discutindo" é qual a proposta do enunciado (creio que faz parte das técnicas entender antes do que se trata, para então achar uma solução válida). Se é para usar apenas a própria string ou se apenas é importante obter o inverso dela. Tipo... se usando funções inviabilizasse o uso de apenas a própria string (o que não acho que seja o caso), simplesmente não usaria funções.

 

É análogo a está questão:

1 hora atrás, arfneto disse:

porque usar void não acrescenta nada, mas retornar o endereço da string resultante permite usar o valor em expressões.

 

Ou seja: o que está sendo argumentado aí está em relação a funcionalidade ou boas práticas (ou algo do tipo) no uso de funções, mas como citado, a questão não é como usar funções, mas sim como se deve inverter.

 

Link para o comentário
Compartilhar em outros sites

10 minutos atrás, Simon Viegas disse:

mas sim como se deve inverter

Então se eu fizesse algo assim:

int main() {
    char *string = malloc(100 * sizeof(char));
    char *palavraInvertida = NULL;

    int tamanho = 0;

    printf("Digite uma palavra: ");
    fgets(string, 100, stdin);
    string[strcspn(string, "\n")] = '\0';

    tamanho = (int) strlen(string);

    palavraInvertida = malloc(tamanho * sizeof(char));

    for (int i = 0; string[i] != '\0'; ++i) {
        palavraInvertida[tamanho - 1] = string[i];
        tamanho--;
    }

    string = palavraInvertida;
    printf("%s \n", string);

    return EXIT_SUCCESS;
}

Seria válido? Não usei funções, a variável string foi invertida e usei uma variável auxiliar palavraInvertida.

adicionado 5 minutos depois
19 minutos atrás, Simon Viegas disse:

Perceba que o exercício não é sobre funções

Concordo completamente. Sugeri o uso de funções pela usabilidade. Mas o que realmente importa é o código dentro dela. Além do mais, o enunciado não impõe nenhum tipo de restrição quanto à técnica que pode ou não ser usada.

Link para o comentário
Compartilhar em outros sites

48 minutos atrás, Simon Viegas disse:

entendo e estou aberto para as argumentações, mas não concordo... continuo achando que é para inverter a própria string... e não "obter um inverso da string". Inverter algo é uma coisa. Já ter o correspondente a o algo invertido, é uma coisa distinta. A partir do momento que tem duas strings, trataria-se de outro algoritmo... um outro problema...

 

9 horas atrás, DAMS disse:

Faça um programa que receba uma string digitada pelo usuário, inverta os caracteres dessa string e imprima a string invertida. Por exemplo, se a string informada for “ROMA”, deve ser retornada a string “AMOR”


Faz sentido.
Mas eu não consegui entender isso do enunciado. Ainda não consigo. Não vejo onde está sequer sugerido que a string deva ser a mesma. Não está escrito que a "string invertida deva ser a mesma".


Esse é um exercício muito comum para iniciantes e o objetivo normal é se tentar avaliar a capacidade do cara de usar um índice para a esquerda e um para a direita ao mesmo tempo. Ou de usar uma pilha quando no contexto de estrutura de dados. Vai encontrar esse exercício quase certamente em uma apostila de exercícios sobre pilhas por exemplo. Mas aí dizendo claramente: "use uma estrutura de pilha para inverter...."

 

26 minutos atrás, Simon Viegas disse:

Perceba que o exercício não é sobre funções... mas sim sobre as "técnicas de programação" mesmo. O que estamos "discutindo" é qual a proposta do enunciado (creio que faz parte das técnicas entender antes do que se trata, para então achar uma solução válida)

 

2 horas atrás, arfneto disse:

Esse enunciado não é assim o máximo em objetividade, já que o item 2 começa falando em algoritmo e depois em programa, mas fica definido que são dois programas, afinal está escrito lá.


Se fossem 2 funções provavelmente no mundo C a gente declararia 

 

Parece que não leu o que que escrevi no mesmo parágrafo, aquela parte onde está escrito "Se fossem 2 funções"...

Eu não escrevi sobre as funções para criticar o que você disse: só mostrei, com exemplos e citando na da menos que a biblioteca padrão, porque não retornar void  e espero que entenda como tal. Você também entendeu que era para escrever 2 programas e foi você citou inicialmente "retornar void".

 

56 minutos atrás, AdrianoSiqueira disse:

Entendo que há situações onde não é preciso retornar valor algum, mas sinceramente acredito que não é o caso desse exercício...

 

Tem razão. Mas o que retornar é uma questão de formar um hábito, porque escrever funções não é algo que se faz pouco em C. E quando o cara está começando existe a tendência dos instrutores de usar void e não explicar esses efeitos que eu expliquei. Espero que tenha entendido a questão de expressões e lvalues...

 

A questão que @Simon Viegas está levantando é que ele entendeu que a string deve ser invertida in-place, na mesma área. Entendeu? Não como você ou eu sugerimos. Deve retornar a mesma única string. Operando na mesma área de memória.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em tempo, eis uma possibilidade usando uma implementação muito mínima de pilha, apenas para mostrar a ideia de inversão de sentido que é o que acontece quando a gente pega uma pilha de coisas e troca de lugar uma a uma...

 

O programa mostra


Entrada: Qualquer Coisa

Entrada: 'Qualquer Coisa'
Coloca na pilha letra a letra

Tira da pilha e poe na string de saida
Saida: 'asioC reuqlauQ'

Eis o código

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

#define   _P_LIMITE    256
const int p_limite = _P_LIMITE;
int       p_topo = 0;
char      p_pilha[_P_LIMITE];

int p_pop();  // tira da pilha
int p_push(char); // poe na pilha

int main()
{
    char    entrada[32];
    char    saida[31];
    printf("\nEntrada: ");
    fgets(entrada, 30, stdin);
    char limite = (char) strlen(entrada) - 1;
    entrada[limite] = 0;
    printf("\nEntrada: '%s'\n", entrada);

    printf("Coloca na pilha letra a letra\n");
    // coloca na pilha os valores
    for (int i = 0; i < limite; i += 1) p_push(entrada[i]);
    char c = 0;

    // agora tira da pilha e poe na saida
    // e eles vão estar invertidos
    printf("\nTira da pilha e poe na string de saida\n");
    saida[limite] = 0; // termina a string de saida no mesmo tamanho
    char indice_saida = 0;
    while ((c = p_pop()) > 0)
    {   saida[indice_saida] = c;
        indice_saida += 1;
    };
    printf("Saida: '%s'\n", saida);
    return 0;
};  // main()

int p_pop()
{
    if (p_topo <= 0) return -1;
    char v = p_pilha[p_topo - 1];
    p_topo = p_topo - 1;
    return v;
};  // p_pop()

int p_push(char v)
{
    if (p_topo > p_limite) return -1;
    p_pilha[p_topo] = v;
    p_topo = p_topo + 1;
    return p_topo;
};  // p_push()

usando os nomes clássicos push() e pop() para colocar e retirar da tal pilha

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 21/04/2020 às 09:16, DAMS disse:

Faça um programa que receba uma string digitada pelo usuário, [...]

Essa é a primeira tarefa (vírgula). Implementa-se em muitos níveis (Iniciante - Avançado) tem pra todos; o básico vem com as funções do arquivo de entrada padrão (stdio). Assim, depois de uma mensagem amigável, leia uma string com scanf ou outra função do mesmo arquivo a sua escolha.

 

Em 21/04/2020 às 09:16, DAMS disse:

[...] inverta os caracteres dessa string [...]

Não existe como inverte um caractere, quiçá caracteres né, no plural!

Qual o resultado da inversão de 'A' por exemplo? Trocar como e pelo quê?

 

Agora...

"inverta essa string" ou ainda quem sabe;

"inverta a posição dos caracteres dessa string". A segunda hipótese me deixa a preposição (de) mais bonita.

 

Assim, os primeiros serão os últimos da sequência (string) e tem poucas soluções pra isso.

 

Em 21/04/2020 às 09:16, DAMS disse:

e imprima a string invertida [...]

Sem problema.

 

Em 21/04/2020 às 09:16, DAMS disse:

Por exemplo, se a string informada for “ROMA”, deve ser retornada a string “AMOR”.

"Deve ser retornada" Quantos verbos!

Melhor dizer assim

 

Exemplo

Entrada.: ROMA 
Saída...: AMOR
|

 

Bons Estudos!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 21/04/2020 às 21:39, Mauro Britivaldo disse:
Em 21/04/2020 às 09:16, DAMS disse:

[...] inverta os caracteres dessa string [...]

Não existe como inverte um caractere, quiçá caracteres né, no plural!

Qual o resultado da inversão de 'A' por exemplo? Trocar como e pelo quê?

 

@Mauro Britivaldo, faz todo sentido, mas apenas entendi como uma metonímia mesmo...

 

Confesso que nem passou pela minha cabeça esta interpretação da inversão do caractere em si. Interessante!

 

De qualquer forma acho que o exemplo realmente deixa claro o resultado desejado:

Em 21/04/2020 às 09:16, DAMS disse:

se a string informada for “ROMA”, deve ser retornada a string “AMOR”.

 

 

 

De qualquer sorte, acho que daria para inverter no C, sim 😆... algo como:

 

951003677_caracteresinvertidos.png.2f8b2

 

 

Obs.: confesso que não parei para criar um algoritmo, mas chutaria que deve algo relacionado a manipulação de códigos ANSI ou ASCII... sei lá. Eu apenas coloquei para imprimir na marra, rs:

#include <stdio.h>

int main()
{
    printf("ROMA\n");
    printf("ꓤOWⱯ");

    return 0;
}

 

outra forma:

int main()
{
    printf("ROMA\n");
    printf("ЯOMA");

    return 0;
}

 

Em fim... é quase certeza que não tem algo a ver!!! kkkkkkkk

 

 

PS: Inicialmente também pensei na inversão dos bits do código do caractere, mas aí já acho que seria viagem de mais!

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!