Ir ao conteúdo
  • Cadastre-se

C++ Armazenar uma string dentro de outra string


Giovanna Moreira
Ir à solução Resolvido por devair1010,

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Solução

@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
Link para o comentário
Compartilhar em outros sites

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