Eu tenho essa função
char toLowerCase(char buf[]){
for(int i =0; buf[i]; i++){
buf[i] = tolower(buf[i]);
}
return *buf;
}
que dá o resultado
INPUT: HELoooO OOOOO
RESULT: heloooo ooooo
Como faço para modificar isso para que ele converta apenas a primeira string em minúsculas, ou seja. parar depois de ""?
Eu tentei usar strtok, mas ele retorna uma falha de segmentação após a primeira string.
Respostas:
2 para resposta № 1Simplesmente saia do loop após o primeiro espaço:
for (int i = 0; buf[i] && !isspace(buf[i]); ++i)
buf[i] = tolower(buf[i]);
isspace
é definido em ctype.h
assim como tolower
.
Algumas pessoas argumentam que o uso de ponteiros tornará o loop mais legível, mas é tecnicamente equivalente.
for (char * s = buf; *s && !isspace(*s); ++s)
*s = tolower(*s);
Se você quiser pular o espaço à esquerda, precisará modificar um pouco a condição.
char * s = buf;
for (; *s && isspace(*s); ++s)
continue; /* skip leading space */
for (; *s && !isspace(*s); ++s)
*s = tolower(*s);
4 para resposta № 2
buf é uma matriz de caracteres. Você não pode verificar apenas 0 (o que você faz atualmente), também é necessário verificar um espaço em branco. Você pode usar o operador && para fazer isso:
for(int i =0; buf[i] && buf[i] != " "; i++){
A condição é acionada se buf [i] for um
0 para resposta № 3
Basta alterar a condição que mantém o loop for em execução:
void toLowerCase(char buf[]){
for(int i =0; buf[i] && buf[i] != " "; i++){
buf[i] = tolower(buf[i]);
}
}
Também removi o valor de retorno, pois o que você está retornando é o primeiro caractere da string, que não acho que seja o que você pretendia (*buf
é o mesmo que buf[0]
).