Linguagem C TADs - String com append

05/09/2017

0

C

Olá bom dia, estou estudando sobre TAD's atualmente na faculdade, estou em duvida na realização no seguinte exercício:

Sabemos que a linguagem C não possui o tipo String definido. Representamos textos como vetores de char e usamos funções de biblioteca para manipulá-los.

Vamos construir um TAD “String”, que usa um vetor de char para representar o texto (como normalmente fazemos).

Vamos também definir algumas operações para esse TAD:
String cria_string_vazia(): cria uma string vazia (‘\\0’) ok
String cria_string(const char cs[]): cria string contendo cs[] ok
void append(String s1, String s2): apenda s2 em s1
void add_char(String s1, char c): adiciona c no final de s1
String substring(String s1, int ini, int final): retorna a substring delimitada entre ini e final, como uma nova String
(devemos usar alocação dinâmica para algumas tarefas)


Estou com dificuldades em fazer o "void append(String s1, String s2): apenda s2 em s1"

segue meu código até o momento:

String.c

void append(String *s1, String *s2)

{

//1. Calcular tamanho da string

    int String_s1_tam = 0;
    int String_s2_tam = 0;

    while(s1.str[String_s1_tam] != '\\0') String_s1_tam++;
    while(s2.str[String_s2_tam] != '\\0') String_s2_tam++;

    //2. Calcular o número de blocos necessario a S1
     int total_blocos = (String_s2_tam/tam_bloco) +1;


      //3. Alocar memória para struct String
     String *s = (String*)malloc(sizeof(String));

    //4. Alocar memória para o vetor de caracteres

    s->str = (char*)calloc((tam_bloco_s1 * total_blocos), sizeof(char));

    s->str = (char*)calloc((tam_bloco_s2 * total_blocos), sizeof(char));

    //5. Copiar caracteres de s1 para a nova string
    int i;
    for(i=0; i<=String_s1_tam; i++)
    {

        s->str[i] = *String_s1[i];
    }

for(i=0; i<=String_s2_tam; i++)
    {

        s->str[i] = *String_s2[i];
    }



//6. Acertar funções da String s1

    s->tam = String_s1_tam;
    s->blocos = total_blocos;


    //6. Acertar funções da String s2

    s->tam = String_s2_tam;
    s->blocos = total_blocos;



}


String.h

#ifndef STRING_H_INCLUDED
#define STRING_H_INCLUDED
#define tam_bloco 5
#define tam_bloco_s1 5
#define tam_bloco_s2 5
typedef struct s_tring{

char *str;
    int tam;
    int blocos;

}String;

//String *cria_string_vazia();
//String *cria_string(const char cs[]);
void append(const char *String_s1[], *String_s2[], );

#endif // STRING_H_INCLUDED


Main.c

#include <stdio.h>
#include <stdlib.h>
#include "String.h"
int main()
{

//String *s = cria_string_vazia();
//String *s = cria_string("String de teste");

    //printf("String_vazia:[%s]\\n", s->str);
    //printf("String_vazia:[%d]\\n", s->tam);
    //printf("String_vazia:[%d]\\n", s->blocos);

    void append(String s1,String s2);


    printf.append("String 1: [%s]\\n", s->str );






return 0;
}



teria algum jeito mais simples de estar fazendo este código, mais simplificado do que isto no caso?

Estou errando em algum ponto ?

E como posso chamar a função e imprimi-la no main ?

desde já agradeço.
Pedro Oliveira

Pedro Oliveira

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar