Ir para conteúdo

lord_shy

Members
  • Total de itens

    2
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre lord_shy

  1. Eu estive fazendo um programa em C que lia a string1 e apagava a primeira ocorrência da string2. Na string1:"O Rato Roeu a Roupa" se eu colocar "Ra" na string2, o programa apaga corretamente, sem erros. Mas se eu colocar "Ro" na string2, ele dá erro e fecha. Segue abaixo o código comentado: #include <stdio.h> #include <string.h> char *StrDelStr(char *s1, char *s2);//essa função deve apagar a primeira ocorrencia de s2 em s1 int main(void) { char string1[60], string2[30]; printf("digite uma string\n> "); gets(string1); fflush(stdin); //pega a primeira string printf("digite uma outra string menor\n> "); gets(string2); fflush(stdin); //pega a segunda string printf("\nstring ja transformada\n> %s\n", StrDelStr(string1, string2)); return 0; } char *StrDelStr(char *s1, char *s2) { int ocorrencia, i, j, tamanho_s2=strlen(s2), concordancia_s1_s2; char *ptr1=s1, *ptr2=s2; //*ptr1 vai ser equivalente a s1 e *ptr2 vai ser equivalente a s2 for(ocorrencia=i=j=concordancia_s1_s2=0;*ptr1!='\0';*ptr1++, ptr2=s2)//ao invés de usar o s1[i]!='\0' eu usei o *ptr1!='0' para percorrer a { //string, pq depois tenho que apagar os caracteres e o ptr2 é sempre zerado if(ocorrencia==0&&*ptr1==*ptr2)//aqui verifica se eu já apaguei algo antes e se *ptr1 é igual a *ptr2 { while(*ptr1==*ptr2)//se o if for atendido vai inciar o while com a condição de *ptr1==*ptr2 { j++; //o j vai ser adicionado concordancia_s1_s2++; //tanto como o inteiro concordancia_s1_s2 *ptr1++; *ptr2++; //aqui os ponteiros avançam uma posição char } if(concordancia_s1_s2==tamanho_s2) //quando o while for quebrado, esse if verifica se o concordancia_s1_s2 é igual ao tamnho de s2 ocorrencia++; //se for, ocorrencia é adicionado impedindo o acesso à esse if else ptr1-=j; //caso não seja do mesmo temaznho, significa que não era s2 por completo dentro de s1, logo, *ptr regride } //à posição que estava antes de entrar nesse if s1[i++]=*ptr1;//*ptr é escrito em i, que logo depois é adicionado } s1[i]='\0'; //após tudo, é colocado um delimitador no final da string return s1; //e s1 é retornado }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.