Opa, fala aí, ítalo.
Primeiramente, queria agradecer o tempo que tu levou pra escrever essas explicações todas pra mim.
Então, eu tentei fazer seguindo seus passos e empaquei no último passo e tive algumas dúvidas...
Aí vai algumas dúvidas:...
Você poderia me explicar o porque do uso do *(asterisco) antes das variaveis "s" e "remover" da função que vc postou?
void removerSubstring (char *s,const char *remover)
{
while((s = strstr(s,remover)) != NULL)
memmove(s, s + strlen(remover), 1 + strlen(s+strlen(remover)));
}
outra... esse comando "memmove" q vc usou na funçao removerSubstring, procurei eles bastante mas não consegui entender muito bem o que ele faz... eu entendi que, como vc declarou lá embaixo: removerSubstring(nome, "da ");, ele vai remover a substring "da ", da string que eu recebo, só q não entendi muito bem esses parametros + 1 strlen(s+strlen(remover)) e s + strlen(remover).
Bom, por final... aí está o que eu consegui fazer:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void removerSubstring (char *s,const char *remover)
{
while((s = strstr(s,remover)) != NULL)
memmove(s, s + strlen(remover), 1 + strlen(s+strlen(remover)));
}
void letras_minusculas (char recebido[]) {
int i;
for (i=0; i<=strlen(recebido); i++) {
if (recebido[i] >= 65 && recebido[i] <= 90) recebido[i] = recebido[i] + 32;
}}
int main ()
{
char nome[50];
char login[50];
char auxiliar[50];
int i, n_caracteres=0, contador=0, espacos=0;
printf ("Digite um nome: ");
fflush(stdin);
gets(nome);
letras_minusculas(nome);
removerSubstring(nome, "da ");
removerSubstring(nome, "de ");
removerSubstring(nome, "do ");
removerSubstring(nome, "dos ");
removerSubstring(nome, "das ");
n_caracteres = strlen(nome);
for (i=n_caracteres; i >= 0; i--) {
if (espacos < 1) {login[0+contador] = nome[i];
contador++;}
if (nome[i] == 32) {auxiliar [0+espacos] = nome[i+1];
espacos++;}
}
printf("%c%s%s\n", nome[0],strrev(auxiliar), strrev(login));
printf ("%s", strrev(login));
system ("pause");
return 0;
}
Eu consegui fazer as letras iniciais aparecerem, porem nao conseguir armazenar os dados na string "login" como vc falou, tentei usar uma condiçao do espacos ser menor que 1 para ele pegar apenas a primeira palavra (de trás pra frente) e um contador pra poder armazenar as letras do nome recebido nas posições da string "login", só que parece que ela nao recebe nada...
e tambem há um pequeno problema em relação a alguns sobrenomes: se eu digite por exemplo: João Andrade Silva Gomes.
Como o "Andrade " possui o "de ", ele não vai armazenar a inicial "s" de "Silva" pois acho que há um conflito entre a primeira função que vc criou de retirar os "da, de, dos...". ficando: jag...
E, por ultimo, na variavel "auxiliar", ele armazena as iniciais corretamente, porem, ele armazena tambem a inicial do ultimo nome (que seria armazenado na variavel login), ou seja, se eu tivesse conseguido fazer o programa corretamente, ele armazenaria o ultimo nome (variavel login) e tambem a primeira inicial dele seria um dos vetores da string "auxiliar", fazendo com que houvesse 2 letras repetidas.
Exemplo:
Felipe Souza Gomes Junior:
fsgjjunior <-> o j foi escrito juntamente com o "junior", ficando 2 "j".
Bom, é isso. Sei que devo tar pedindo demais para você, mas eu tenho prova essa semana e me dei bastante mal na primeira (sou horrivel em programaçao hehe), então, se achar que é muito não precisa se preocupar com esse post e responda apenas quando tiver tempo etc...
Valeu, cara, agradeço de coração o esforço que tu tá tendo aí pra me ajudar!
Fica com Deus, abraços!