Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com Leitura de String em C


danield1591998

Pergunta

pessoal, eu tenho um problema com  linguagem C que é o seguinte, eu não consigo ler uma string de modo q eu não saiba seu tamanho, em C++ é muito facil, basta criar uma variavel do tipo string e ler se queremos com espaço basta getline(cin,string); Em C eu não consigo fazer isso, eu não consigo ler uma cadeia de caracteres cuja eu não saiba o tamanho e é claro, que seja possível ler essa cadeia incluindo espaço em branco. Alguém sabe como fazer isso?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Existe uma função na biblioteca string.h que retorna a quantidade de caracteres de uma string, chamada strlen.

 

A sintaxe é assim:

 

strlen (nome_da_string);

Um exemplo:

# include <stdio.h>

# include <stdlib.h>

# include <string.h>



int main ()



{

int p;

char nome [10] = "Joao";

p = strlen (nome);

printf ("\n%d\n", p);

return 0;

}

Fui

Já para ler uma string com espaços em branco, um das formas é ajustar o scanf:

 

scanf("%[^\n]s", nome_da_string);

 

[^\n] é uma instrução que diz para gravar tudo que entrou antes do retorno de carro, (enter);

Exemplo:

 

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

int main ()

{

char string [100];

printf ("Digite uma frase: ");
scanf ("%[^\n]s", string);

printf ("\n\n");

printf ("A frase que voce digitou é: %s\n", string);

return 0;

}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Em C é preciso fazer algo bem complicado para isso, no C++ já tem essa função que você disse. Mas olhe só um código que um rapaz escreveu, que resolve o problema citado:

 

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

int main()
{
	char c, *str = NULL;
	int i = 0, j = 1;
	
	str = (char *) malloc(10 * sizeof(char) + 1);
	
	printf("Digite a string: ");
	
	while ((c = getchar()) != '\n' && c != EOF && c != '\0')
	{
		if (j == 10)
		{
			str = (char *) realloc(str, strlen(str) + 10 * sizeof(char) + 1);
			j = 1;
		}
		*(str + i * sizeof(char)) = c;
		i++;
		j++;
	}
	
	*(str + i * sizeof(char)) = '\0';
	
	puts("\n\n");
	
	printf("%s\n\n", str);
	
	free(str);
  
  	str=NULL;
	
	return 0;
}

Sempre que a string chega em 10, seu limite, é realocada com mais slots na memória. E char a char a string vai sendo obtida com tamanho dinâmico.

Na verdade não char a char, mas sim enquanto não for encontrado o retorno de carro e o fim da string '\0'

Link para o comentário
Compartilhar em outros sites

  • 0

Simplificando para mim mesmo entender melhor, eu deixaria o código assim:

 

#include <stdio.h>
#include <stdlib.h>
//#include <malloc.h>
#include <string.h>

int main()
{
	char c, *str = NULL;
	int i, j = 1;

	str = (char *) malloc(10 * sizeof(char) + 1);

	printf("Digite a string: ");

	i=0, j=0;

	while ((c = getchar()) != '\n' && /*c != EOF &&*/ c!= '\0')

	{

		if (i == 9)

		{
			str = (char *) realloc(str, strlen(str) + 10 * sizeof(char) + 1);

			i=0;

		}

		str [j] = c;

		i++;
		j++;

	}

	str [j+1] = '\0';

	puts("\n\n");

	printf("%s\n\n", str);

	free(str);

  	str=NULL;

	return 0;
  }
  
  Fui.

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...