/ / Converter apenas a primeira palavra da string em minúsculas - c

Converta apenas a primeira palavra da string para minúscula - c

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 № 1

Simplesmente 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]).