string [RESOLVIDO]

1. string [RESOLVIDO]

Ricardo Gonçalves
Axop

(usa Outra)

Enviado em 07/12/2011 - 20:45h

Boa noite,

Começei agora a ter programação e surgiu-me um exercicio para fazer so que não sei bem como se faz...

Alguém me pode ajudar??

Construa um programa que pede uma string e codifica-a numa nova
string tirando os caracteres do principio e do fim sucessivamente, começando
pela esquerda. Pára quando chegar ao meio da string. Por exemplo, a string
“Atlantico” dá origem à string codificada “oActiltan”.

Obrigado


  


2. Re: string [RESOLVIDO]

Elder Marco
eldermarco

(usa Fedora)

Enviado em 07/12/2011 - 21:34h

Que tal começar a fazer, mostrar onde teve dificuldade e então postar?


3. Re: string [RESOLVIDO]

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 07/12/2011 - 22:33h

pensei o seguinte:

strcpy (new_word, palavra[9-aux]);
strcpy (new_word, palavra[aux]);


copio o caractere 9 da palavra para uma outra, depois adiciono a primeira letra da palavra à outra palavra, depois exibo a nova palavra.
O que acontece é que não tô conseguindo pensar numa maneira do programa parar quando chegar na metade da palavra, e o certo era ler o tamanho da string (usando o cin.getline para ignorar o enter e outros) para não ficar sobrando espaços vazios. Parei por aqui:


#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
int tamanho, aux=0;
char palavra[10], new_word[10];
cout<<"Digite a palavra: ";
cin.getline(palavra,10);
//Troca de caracteres
for (aux=0; aux<10; aux++)
{
strcpy (new_word, palavra[9-aux]);
strcpy (new_word, palavra[aux]);
}
cout<<new_word;
return 0;
}


Se isso puder ser útil..


4. Re: string [RESOLVIDO]

Ramon
ramonzitos

(usa Gentoo)

Enviado em 08/12/2011 - 08:55h

Eu não conheco C, então fiz em Python, se puder ajudar...

#!/usr/bin/env python
def code_par(a):
j = 0
b = []
while j*2 != len(a):
b.append(a[-(j+1)])
b.append(a[j])
j = j + 1
return b
def code_impar(a):
j = 0
b = []
while (j*2)+1 != len(a):
b.append(a[-(j+1)])
b.append(a[j])
j = j + 1
b.append(a[(j)])
return b
s = raw_input("Digite uma frase: ")
a = []
a.extend(s)
if len(a) % 2 == 0:
ac = code_par(a)
else:
ac = code_impar(a)
print("String codificada: %s" % "".join(ac))



5. Re: string [RESOLVIDO]

Ricardo Gonçalves
Axop

(usa Outra)

Enviado em 08/12/2011 - 19:39h

Obrigado este ajudou-me :D

JoseRenan escreveu:

pensei o seguinte:

strcpy (new_word, palavra[9-aux]);
strcpy (new_word, palavra[aux]);


copio o caractere 9 da palavra para uma outra, depois adiciono a primeira letra da palavra à outra palavra, depois exibo a nova palavra.
O que acontece é que não tô conseguindo pensar numa maneira do programa parar quando chegar na metade da palavra, e o certo era ler o tamanho da string (usando o cin.getline para ignorar o enter e outros) para não ficar sobrando espaços vazios. Parei por aqui:


#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
int tamanho, aux=0;
char palavra[10], new_word[10];
cout<<"Digite a palavra: ";
cin.getline(palavra,10);
//Troca de caracteres
for (aux=0; aux<10; aux++)
{
strcpy (new_word, palavra[9-aux]);
strcpy (new_word, palavra[aux]);
}
cout<<new_word;
return 0;
}


Se isso puder ser útil..





6. Re: string [RESOLVIDO]

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 09/12/2011 - 09:42h

to no serviço mas dei uma olhada e consegui fazer funcionar parcialmente, falta alterar para fazer funcionar quando a palavra é ímpar, mas deve tá quase lá, fiz meio corrido mais tarde dou uma outra olhada pra ve se faço funcionar.

#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
int tamanho, aux=0;
cout<<"Digite o tamanho da palavra: ";
cin>>tamanho;
--tamanho;
char palavra[tamanho];
cout<<"Digite a palavra: ";
cin>>palavra;
//Troca de caracteres
if (tamanho%2!=0)
{
for (aux=0; aux<tamanho; aux++)
{
cout<<palavra[tamanho-aux];
cout<<palavra[aux];
if (aux==tamanho/2) break;
}
}
else
{
for (aux=0; aux<=tamanho; aux++)
{
cout<<palavra[tamanho-aux];
if (aux<tamanho/2) cout<<palavra[aux];
}
}
return 0;
}


================================
Consegui, mas só exibe os caracteres misturados não é uma nava string modificada, mas pra quem não sabe das entranhas do programa já tá ótimo, não é?

#include <iostream>
using namespace std;
int main ()
{
int tamanho, aux=0, cont=1;
cout<<"Digite o tamanho da palavra: ";
cin>>tamanho;
--tamanho;
char palavra[tamanho];
cout<<"Digite a palavra: ";
cin>>palavra;
//Troca de caracteres
if (tamanho%2!=0)
{
for (aux=0; aux<tamanho; aux++)
{
cout<<palavra[tamanho-aux];
cout<<palavra[aux];
if (aux==tamanho/2) break;
}
}
else
{
for (aux=0; aux<=tamanho/2; aux++)
{
cout<<palavra[tamanho-aux];
if (aux<tamanho/2) cout<<palavra[aux];
}
}
return 0;
}



7. Re: string [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 10/12/2011 - 20:42h

Boa noite.

Vê se é isso aí que você quer....

Qualquer dúvida, só falar.

Atenciosamente,
Enzo Ferber
[]'s

Código do programa:
~~~~~~~~~~~~~~~~~~~


// swapcoding.c

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

// o proximo define faz com que a limpeza do buffer funcione no em *nix e windows!
#ifndef WIN32
#define fflush __fpurge
#endif

/*
* argc, argv -> argumentos que podem ser usados para entrada
* pela linha de comando no Linux/Unix
*/
int main (int argc, char*argv[])
{
char str[512]; // entrada de dados
char aux[512]; // string invertida
register int i,j; // contadores

// permite entrada de dados até que o usuário digite 'exitme'
while(1)
{
// query!
printf ("Input : "); fflush(stdin); scanf("%[^\n]", str);

// saida do loop
if( !strcmp(str,"exitme")) break;

/*
* i -> referencia na string original
* j -> referencia na string codificada
*/
for ( i = 0, j=0; i < (strlen(str))/2; i++,j+=2 ) {
aux[j] = str[strlen(str)-i -1];
aux[j+1] = str[i];
}

// letra do meio se for impar!
if ( strlen(str)%2)
aux[strlen(str)-1] = str[strlen(str)/2];

// ultimo caractere
aux[strlen(str)] = 0x0;

// print it!
printf( "Output: %s\n\n", aux);
}

// bye-bye
return 0;
}
// EoF



$ gcc -o swapcoding swapcoding.c
$ ./swapcoding
Input : enzo
Output: oezn

Input : Atlantico
Output: oActiltan

Input : VivaOLinux
Output: xVuinviaLO

Input : Slackware
Output: eSrlaawck

Input : EnzoFerber
Output: rEenbzroeF

Input :


8. Re: string [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 10/12/2011 - 20:44h

Alguém sabe pelo amor de Deus como faço para 'setar' o highlight dessa tag code??????


Tá em BASH.... quero em C!!!!!


9. Re: string [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 10/12/2011 - 20:54h

Em tempo:

Fiz as duas strings como 512 bytes cada, apenas pra poupar tempo/espaço com todo o código proveniente de alocações de memória e checagem de erros.

Mas em projetos grandes, utilize sempre ponteiros e checagem de memórias, com muitos DEFINES. Fica bem mais fácil editar o programa.

Se for usar vetores, sempre cheque o número de caracteres sendo lido/armazenados para evitar falhas de segurança como buffer overflows.

[]'s






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts