Linguagem C TADs - String com append
05/09/2017
0
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_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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)