Ir ao conteúdo

C++ Armazenar uma string dentro de outra string


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Faça um programa que leia cinco palavras pelo teclado, e armazene cada palavra em uma string. Depois, copie somente as posições pares para outras 5 string.  Por fim imprima as 10 strings.

Consegui gerar apenas os caracteres das posições pares mas não consigo colocá-los dentro de uma string, alguém pode me ajudar?

 

#include <stdio.h>

#include <string.h>

#define TAM 15

int main()

{

char str1[TAM], str2[TAM], str3[TAM], str4[TAM], str5[TAM], str6[TAM];

char str[TAM*5], i=0;


 

/* Le todas as strings */

printf("\n\n Digite 5 strings, teclando <ENTER> ao final de cada uma:\n");

gets(str1);

gets(str2);

gets(str3);

gets(str4);

gets(str5);


 

str[0] = '\0';

 

printf("\n");

printf("\n");

  for(i=0; str1[i] !='\0'; i++)

 

  {

    if(i%2==0)

    printf("%c", str1[i]);    

   

  }

 

  printf("\n");

  printf("\n");

  for(i=0; str2[i] !='\0'; i++)

 

  {

    if(i%2==0)

    printf("%c", str2[i]);        

  }

 

  printf("\n");

  printf("\n");

  for(i=0; str3[i] !='\0'; i++)

 

  {

    if(i%2==0)

    printf("%c", str3[i]);        

  }

 

  printf("\n");

  printf("\n");

  for(i=0; str4[i] !='\0'; i++)

 

  {

    if(i%2==0)

    printf("%c", str4[i]);        

  }

 

  printf("\n");

  printf("\n");

  for(i=0; str5[i] !='\0'; i++)

 

  {

    if(i%2==0)

    printf("%c", str5[i]);        

  }

  

return(0);

}

  • Obrigado 1
Postado

@Giovanna Moreira    você postou seu código no tópico de C++,  e como você está dizendo string , então creio que seja mesmo em C++ que você esteja querendo esse código ,  pois esses comandos que você postou são todos da linguagem  c  ,   e C++ é outra Linguagem , mas o que acontece é que o C++ aceita os comandos da linguagem  c ,  mas se for fazer usando apenas os comandos da Linguagem c++ , então seu código poderia ser assim  :

#include <iostream>
#include <cstring>
#define TAM 15
using namespace std;
int main()
{
    string str0,str1,str2,str3,str4,
           str5,str6,str7,str8,str9;
    cout<<"uma palavra ";
    cin>>str0;
    cout<<"outra palavra ";
    cin>>str1;
    cout<<"outra palavra ";
    cin>>str2;
    cout<<"outra palavra ";
    cin>>str3;
    cout<<"outra palavra ";
    cin>>str4;
    str5="";
    cout<<"Tamanho da string str0 => "<<str0.size()<<endl;
    for(int i=0; i<=str0.size(); i+=2)
        str5 += str0[i];
    for(int i=0; i<=str1.size(); i+=2)
        str6 += str1[i];
    for(int i=0; i<=str2.size(); i+=2)
        str7 += str2[i];
    for(int i=0; i<=str3.size(); i+=2)
        str8 += str3[i];
    for(int i=0; i<=str4.size(); i+=2)
        str9 += str4[i];

    cout<<"str5 = "<<str0<<endl;
    cout<<"str6 = "<<str1<<endl;
    cout<<"str7 = "<<str2<<endl;
    cout<<"str8 = "<<str3<<endl;
    cout<<"str9 = "<<str4<<endl;
    cout<<"str5 = "<<str5<<endl;
    cout<<"str6 = "<<str6<<endl;
    cout<<"str7 = "<<str7<<endl;
    cout<<"str8 = "<<str8<<endl;
    cout<<"str9 = "<<str9<<endl;
    return 32768;
}

mas se puder e quiser usar vetores seria bem mais fácil , e o código ficaria bem menor .

  • Amei 1
Postado

@devair1010 , tentei fazer de outra forma mas encontro um problema... Quando coloco palavras com número total de caracteres ímpares ele imprime errado. Por exemplo, JULIANA ele me retorna jlaañ╡, mas caso eu entre com uma palavra com total de caracteres pares ele funciona. Acredito que seja um problema relacionado ao meu \0.

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

int main(){

char str1[50], str6[50], str2[50], str7[50], str3[50], str8[50], str4[50], str9[50], str5[50], str10[50];
int i1, tam1=0, i2, tam2=0, i3, tam3=0, i4, tam4=0, i5, tam5=0;

printf("\nEntre com uma string: ");
gets(str1);

 for(i1=0; i1<strlen(str1)-1; i1++){
     str6[tam1]=str1[2*i1];
     tam1++;
 }

str6[tam1]='\0';       
printf("\nString modificada: %s\n", str6);
system("pause");

printf("\nEntre com uma string: ");
gets(str2);

 for(i2=0; i2<strlen(str2)-1; i2++){
     str7[tam2]=str2[2*i2];
     tam2++;
 }

str7[tam2]='\0';       
printf("\nString modificada: %s\n", str7);
system("pause");

printf("\nEntre com uma string: ");
gets(str3);

 for(i3=0; i3<strlen(str3)-1; i3++){
     str8[tam3]=str3[2*i3];
     tam3++;
 }

str8[tam3]='\0';       
printf("\nString modificada: %s\n", str8);

system("pause");


printf("\nEntre com uma string: ");
gets(str4);

 for(i4=0; i4<strlen(str4)-1; i4++){
     str9[tam4]=str4[2*i4];
     tam4++;
 }

str9[tam4]='\0';       
printf("\nString modificada: %s\n", str9);
system("pause");

printf("\nEntre com uma string: ");
gets(str5);

 for(i5=0; i5<strlen(str5)-1; i5++){
     str10[tam5]=str5[2*i5];
     tam5++;
 }

str10[tam5]='\0';       
printf("\nString modificada: %s\n", str10);

printf("\nAs strings obtidas e suas respectivas modificacoes: %s, %s, %s, %s, %s, %s, %s, %s, %s, %s.\n", str1, str2, str3, str4, str5, str6, str7, str8, str9, str10);

return(0);
}

 

  • Obrigado 1
Postado

Você pode usar matriz para reduzir a quantidade de declarações.

 

O loop para verificar as posições pode ficar dentro do que recebe as strings.

 

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

#define MAX 15

int main(){
    char str1[5][MAX];
    char str2[5][MAX];
    int i, n, p;
    
    for(i=0;i<5;i++){
        printf("Palavra %d: ", i + 1);
        fgets(str1[i],MAX,stdin);
        
        for(n=0,p=0;n<strlen(str1[i])-1;n++){
            if(!(n % 2)){
                str2[i][p] = str1[i][n];
                p++;
            }
        }
        str2[i][p++] = '\0';
    }    
    printf("\nSTRINGS 1\n");
    for(i=0;i<5;i++){printf("%s",str1[i]);}
    
    printf("\nSTRINGS 2\n");
    for(i=0;i<5;i++){printf("%s\n",str2[i]);}
    
    return 0;
}

 

  • Obrigado 2
  • Solução
Postado

@Giovanna Moreira    esse que o @Midori  postou usa vetores e por isso é melhor pois o código fica bem menor ,  e esse seu está com erro por causa do finalizador de string mesmo , e também , você está usando um comando antigo da linguagem  c  , que é o gets , e as informações sobre ele é que ele tem comportamento indefinido em outro sistema que não seja o windows , então melhor não usa-lo , e ao invés use o fgets é mais seguro , e a diferença mais visível dele é que ele pega todos os dados digitados no teclado até o newLine ( "\n" ) e seria assim :

pega todos os caracteres digitados , até mesmo um espaço , e no final coloca os dos caracteres ditos :
"dados_digitados e com espaco\0\n"

e então seu código poderia ser assim  :

#include <stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{
  char str0[50], str1[50], str2[50],
       str3[50], str4[50], str5[50],
       str6[50], str7[50], str8[50],
       str9[50];
  int  i0, tam0=0, i1, tam1=0, i2,
       tam2=0,i3,tam3=0,i4,tam4=0;
  printf("Uma string: ");
  fgets(str0,49,stdin);
  str0[strlen(str0)-1] = '\0';
  for(i0=0; i0<strlen(str0)-1; i0++)
  {
    str5[tam0] = str0[2 * i0];
    tam0++;
  }
  printf("String modificada: %s\n",str5);
  system("pause");

  printf("\nOutra string: ");
  fgets(str1,49,stdin);
  str1[strlen(str1)-1] = '\0';
  for(i1=0; i1<strlen(str1)-1; i1++)
  {
    str6[tam1] = str1[2 * i1];
    tam1++;
  }
  printf("String modificada: %s\n", str6);
  system("pause");

  printf("\nOutra string: ");
  fgets(str2,49,stdin);
  str2[strlen(str2)-1] = '\0';
  for(i2=0; i2<strlen(str2)-1; i2++)
  {
    str7[tam2] = str2[2 * i2];
    tam2++;
  }
  printf("String modificada: %s\n", str7);
  system("pause");

  printf("\nOutra string: ");
  fgets(str3,49,stdin);
  str3[strlen(str3)-1] = '\0';
  for(i3=0; i3<strlen(str3)-1; i3++)
  {
    str8[tam3] = str3[2 * i3];
    tam3++;
  }
  printf("String modificada: %s\n", str8);
  system("pause");

  printf("\nOutra string: ");
  fgets(str4,49,stdin);
  str4[strlen(str4)-1] = '\0';
  for(i4=0; i4<strlen(str4)-1; i4++)
  {
    str9[tam4] = str4[2 * i4];
    tam4++;
  }
  printf("String modificada: %s\n", str9);
  system("pause");

  printf("\nAs strings obtidas e suas respectivas modificacoes:            \
          \n\n%15s == %s\n%15s == %s\n%15s == %s\n%15s == %s\n%15s == %s\n",
         str0, str5, str1, str6, str2, str7, str3, str8, str4, str9       );
  return 32768;
}

 

  • Obrigado 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!