Ir ao conteúdo

Duvida sobre strings e loops


Andryas

Posts recomendados

Postado

Gostaria de fazer um programa que declara um vetor de char(string) de tamanho 100, por exemplo, e usando iteração vai gravando os valores depois daqueles que já haviam sido guardados anteriormente.

Entretanto, se eu faço algo do tipo:


int main(){
char ch[100];
char ctrl = 'n';
while(ctrl == 'n'){
gets(ch);
printf("\nDeseja sair (s/n): ");
ctrl = getch();
}

Em toda iteração haverá uma leitura da string, porém estarei sobrescrevendo na string e perderei o valor gravado no passo anterior.

OBS: Não quero usar a função strcat, que concatena strings.

Abraços!

Postado

A dúvida não ficou muito clara... você quer fazer o seu próprio strcat?


void strcat2(char *str1, char *str2) {
int tam, x, y;
for (x=0; str1[x] != '\0'; x++) tam = x+1;

for (x=0; x+tam < 100 && str2[x] != '\0'; x++)
str1[x+tam] = str2[x];

str1[x+tam] = '\0';
}

É mais ou menos isso... mas não testei aqui.

Postado

Tipo,imaginem a string "JOAOPEDROPAULOLUCASMANUEL"

eu poderia obte-la atraves de um unico gets,ok?

Mas o que eu quero é um loop onde o usuario em cada iteraçao escreve um nome,mas ao invés de sobrescrever eu concateno com o que ja tinha na string

Postado

Então o código que eu enviei antes responde sua dúvida?

A lógica da coisa é que no C as strings sempre possuem um caractere pra indicar o final dela (o famoso '\0').

Então se você declarar uma string de 100 posições, o que vai impedir o programa de imprimir todas essas 100 posições quando, por exemplo, você usa um printf, é esse caractere de final de string.

Por exemplo:

char nome[100] = "Ola mundo";

Nessa string, o nome[9] equivale a esse caractere '\0' (o C já colocou ele automaticamente nesse caso).

Se você colocar pra imprimir a string, vai imprimir "Ola mundo".

Mas se você fizer: nome[3] = '\0'

Então a string fica assim: "Ola\0Mundo"

E quando você der um printf nela, será impresso apenas o "Ola"... o "Mundo" será ignorado.

Então pra concatenar caracteres numa string basta sobrescrever esse caractere '\0' com o que quiser e colocar ele de volta no final, quando terminar.

nome[3] = ' ';

nome[9] = ' ';

nome[10] = 'o';

nome[11] = 'i';

nome[12] = '\0';

A string agora é "Ola mundo oi"

Postado

porque nao ta dando certo


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

int main(){
char ch[50]="";
char aux[50]="";

int tam;
char ctrl = 's';
while(ctrl == 's'){
gets(aux);
strcat(ch,aux);
printf("\ndeseja continuar(s/n): ");
scanf("%c",&ctrl);
}
puts(ch);
system("PAUSE");

}

Postado

Troque o: scanf("%c",&ctrl);

por: scanf("%c%*c", &ctrl);

Quando você digita 's' e aperta enter o %c acaba captando o enter em vez do 's'.

Colocando mais um %c, você captura o s no primeiro e o enter no segundo.

Aquele asterisco no segundo %c é só pra dizer pro scanf ignorar o segundo caractere.

Postado

Valeu MANOLoooo! funcionou!

Sobre sua implementação de strcat, quando você faz:


str1[x+tam] = '\0';

é necessario botar o '\0' ??

Ele nao é posto automaticamente?

Abraços

Postado

Ele é inserido automaticamente quando você usa alguma função do C pra pegar a string... quando você mesmo manipula a string no braço, daí você precisa colocar.

Arquivado

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

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...