Linguagem C TADs - String com append
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
String.h
Main.c
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.
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_INCLUDEDMain.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
Curtidas 0