Ir para conteúdo

POWERED BY:

Arquivado

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

ericio

Strings C

Recommended Posts

Tenho um exercício que diz :

Escreva uma função f(palavra1,palavra) a qual recebe como parametro duas palavras e deve retornar uma palavra que contenha somente os caracteres comuns nas duas, independente da sua posição.

Comecei a fazer mas não sei como fazer para o vetor da nova palavra receber os caracteres comuns..

#include "stdafx.h"
#include "stdio.h"

char resultado[30];

void (char plv1[30],char plv2[30])
{

	int i,j;

	for (i=0;i<30;i++)
	{
		for (j=0;j<30;j++)
		{
			if (plv1[i]==plv2)

}


int main(int argc, char* argv[])
{
	char palavra1[30],palavra2[30];

	printf(" Entre com duas palavras :\n");

	gets (palavra1);

	gets(palavra2);

	resultado [30] = palavras(palavra1,palavra2);


	return 0;
}

 

:mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include "stdafx.h"
#include "stdio.h"

Sou capaz de apostar meus braços que isso é Dev C/C++...

 

Se for, jogue fora e pegue uma IDE tipo Eclipse, Netbeans ou Code::Blocks, e não qualquer bagulho que você encontrar na internet.

 

 

 

 

void (char plv1[30],char plv2[30])
{

       int i,j;

       for (i=0;i<30;i++)
       {
               for (j=0;j<30;j++)
               {
                       if (plv1[i]==plv2)

}

 

 

 

 

 

Conserte isso primeiro.

 

 

 

 

E pela 129382739817492ª vez: não use gets!.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

kra como é C, use:

 

scanf("%s %s",&palavra1,&palavra2);

 

Ele vai ler as duas separadas por espaço!

 

Sou capaz de apostar meus braços que isso é Dev C/C++...

Essa foi ótima _Isis_!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende, scanf não da problema se for bem usado.

Da pra ler apenas 29 caracteres da stream de entrada, sem correr riscos de um segfault:

scanf("%29s%*[^\n]%*c", str);

Compartilhar este post


Link para o post
Compartilhar em outros sites

- O scanf permite limitar o número de caracteres que serão 'aceitos', mas não é capaz de capturar espaços e afins (interpreta como delimitador ou algo assim).

- O gets captura espaços e afins, mas não permite limitar o tamanho da entrada.

 

A solução que uso, que considero perfeita (permitam-me achar), é o fgets. O próprio nome diz que o uso comum dele é para leitura de arquivos, mas você pode passar como stream 'stdin' (standard input), ou seja, o teclado. Essa função une o melhor do scanf com o melhor do gets, permitindo limitar o tamanho da entrada e capturar espaços.

 

Use assim, por exemplo:

 

char string[81];
fgets(string,sizeof(string),stdin);
Só deve-se ter atenção que, como lendo um arquivo com o fgets, a função só para quando encontrar um caracter de quebra de linha '\n' (neste caso, pressionar ENTER acaba por encerrar a captura da entrada). A menos que o tamanho da entrada seja maior ou igual ao tamanho da string menos um, os dois últimos caracteres sempre serão '\n' e '\0'. Por isso, costumo fazer assim para eliminar este '\n'.

 

char string;
int tamanhoString;
fgets(string,sizeof(string),stdin);
tamanhoString=strlen(string);
if(tamanhoString<sizeof(string)-1)
     string[tamanhoString-1]='\0';
else
     if(string[sizeof(string)-2]=='\n')
          string[sizeof(string)-2]='\0';

Compartilhar este post


Link para o post
Compartilhar em outros sites

- O scanf permite limitar o número de caracteres que serão 'aceitos', mas não é capaz de capturar espaços e afins (interpreta como delimitador ou algo assim).

- O gets captura espaços e afins, mas não permite limitar o tamanho da entrada.

 

A solução que uso, que considero perfeita (permitam-me achar), é o fgets. O próprio nome diz que o uso comum dele é para leitura de arquivos, mas você pode passar como stream 'stdin' (standard input), ou seja, o teclado. Essa função une o melhor do scanf com o melhor do gets, permitindo limitar o tamanho da entrada e capturar espaços.

 

Use assim, por exemplo:

 

char string[81];
fgets(string,sizeof(string),stdin);
Só deve-se ter atenção que, como lendo um arquivo com o fgets, a função só para quando encontrar um caracter de quebra de linha '\n' (neste caso, pressionar ENTER acaba por encerrar a captura da entrada). A menos que o tamanho da entrada seja maior ou igual ao tamanho da string menos um, os dois últimos caracteres sempre serão '\n' e '\0'. Por isso, costumo fazer assim para eliminar este '\n'.

 

char string;
int tamanhoString;
fgets(string,sizeof(string),stdin);
tamanhoString=strlen(string);
if(tamanhoString<sizeof(string)-1)
     string[tamanhoString-1]='\0';
else
     if(string[sizeof(string)-2]=='\n')
          string[sizeof(string)-2]='\0';

Dá pra simplificar

 

char string; //[blablabla]
    int tamanhoString;
    fgets(string,sizeof(string),stdin);
    tamanhoString=strlen(string);
    if(string[tamanhoString - 1] == '\n')
         string[tamanhoString - 1]='\0';

Compartilhar este post


Link para o post
Compartilhar em outros sites

O scanf permite limitar o número de caracteres que serão 'aceitos', mas não é capaz de capturar espaços e afins (interpreta como delimitador ou algo assim)

 

Repetindo, é só saber usar o scanf...

scanf("%29[a-zA-Z0-9 ]%*[^\n]%*c", str);
Dessa forma os caracteres estão limitados, e aceita espaços...

 

http://linux.die.net/man/3/scanf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nuss...

 

Como faço pra mostrar esses caracteres? Eles mostram apenas até o espaço em branco!

 

Usei printf e puts!

 

Tipo:

puts(total[h].s);

Depois de usar a linha que você colocou acima:

scanf("%29[a-zA-Z0-9 ]%*[^\n]%*c", str);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara você usa os comandos que você achar melhor, não porque as pessoas acham que você deve usar isso ou aquilo.

Qualquer um pode escrever código que o computador pode entender. Bons programadores escrevem código que seres humanos pode entender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara você usa os comandos que você achar melhor, não porque as pessoas acham que você deve usar isso ou aquilo.

Qualquer um pode escrever código que o computador pode entender. Bons programadores escrevem código que seres humanos pode entender.

 

http://forum.imasters.com.br/public/style_emoticons/default/seta.gif

Não pode user gets(), scanf(), fflush(stdin) mimimmmimimimi, faça me o favor.

Concordo com você.

Sem mais!

 

O que você ja fez ? Posta ae. Conseguiu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não pode user gets(), scanf(), fflush(stdin) mimimmmimimimi, faça me o favor.

 

Faça-me o favor você. Tem um post explicando isso nesse fórum e você inclusive comentou nele.

 

Se não quiser ler no fórum, tem no Google, mas tratar isso como se fosse frescura de desenvolvedor é típico de gente restrita a windows, compiladores borland, headers antigos e que não estão nem aí pra buffer overflow, padrões de linguagem e pra falar a verdade, nem sequer consideram a chance de aprender a programar usando outra plataforma ou IDE. Depois que postam em negrito, tamanho 20 e fonte vermelha acham que estão ofendendo a mãe e fazem pouco caso.

 

PS: se alguém aqui acha que eu peguei pesado, 1)não tô ligando porque eu tô falando uma verdade, 2) Vocês não viram nada.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até concordo com a _Isis_, pois usar os comandos com os quais o sistema vai responder melhor e tornar o código mais limpo e portável, pra mim, é essencial. Algo que faz parte das boas práticas de programação!

 

Como no caso do fflush(stdin)... O uso do token é muito mais interessante! E não dói...

 

Mas, depende de cada um... Concordo também quando diz que isso é coisa de gente restrita a Windows e, mais especificamente, a Delphi... Pois, faz o programa e se funcionar... funcionou!

 

Enfim, eu acho sempre importante ver o porquê de usar ou não certos comandos.

 

Apesar de que a _Isis_ não me respondeu porque o scanf() dá erro e qual comando ela usaria pra ler strings com espaços e também o porquê, mas estou aí aguardando!

 

Abçs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de que a _Isis_ não me respondeu porque o scanf() dá erro e qual comando ela usaria pra ler strings com espaços e também o porquê, mas estou aí aguardando!

 

Fala iCl4w, tudo certo?

não é que o scanf da erros, é que o scanf é "chato" de usar.

Vamos "dissecar" o scanf que eu postei ali em cima:

scanf("%29[a-zA-Z0-9 ]%*[^\n]%*c", str);

 

Aqui, dizemos para o scanf ler um limite de 29 caracteres.

Esses caracteres podem ser: 'a', 'b', 'c', 'd', 'e', 'f', ...., 'z' (representado por a-z)

podem ser também: 'A', 'B', 'C', 'D', ..., 'Z' (representado por A-Z)

podem ser também: '0', '1', ..., '9' (representado por 0-9)

Ou, podem ser um espaço em branco. representado pelo próprio espaço em branco.

 

Agora, vamos descarcar tudo, até encontrarmos um '\n'.

vale lembrar que, pode ocorrer de não descartarmos nada, pois não há excesso de informação ali.

 

Agora descartamos um caratere, que com certeza absoluta será um '\n', pois é o que faltou descartar.

 

Exemplos:

"teste1 teste2 teste3\n"

"teste1 teste2 teste3 teste4 teste5 teste6\n"

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é que o scanf da erros, é que o scanf é "chato" de usar.

 

Olá, VictorCacciari... Tá tudo beleza!

 

Sobre o scanf(); eu já conhecia o funcionamento da leitura dos dados do scanf que você colocou...

 

Mas, foi boas... Ao menos você mostrou que o problema do scanf é sua chatice.

 

Vou utilizar o fgets(); que não precisa de tantas definições pra ler espaços.

 

Obrigado kra!

Compartilhar este post


Link para o post
Compartilhar em outros sites

com certeza, vá de fgets que é a melhor coisa!

O scanf é bacana para ler dados formatados, e ja efetuar conversões do tipo string -> int, string -> float, etc...

Algo do tipo:

 

printf("Digite a sua data de nascimento: ");
scanf("%d%*c%d%*c%d", &dia, &mes, &ano);

Mas, se a ideia é ler uma string, fgets é o caminho!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.