Преобразование cstring в camelcase

Поэтому моя задача — выполнить мою функцию для работы с тестовым драйвером, который выдает ему случайную строку при каждом запуске. Для этой функции я должен преобразовать первый символ каждого слова в заглавную, а все остальное должно быть ниже.

В основном это работает, но проблема, с которой я столкнулся в своем коде, заключается в том, что он не будет использовать заглавную букву самого первого символа, и если перед словом вроде есть точка:

.слово

Буква «w» в этом случае останется ниже.

Вот мой источник:

void camelCase(char line[])
{
int index = 0;
bool lineStart = true;

for (index;line[index]!='\0';index++)
{
if (lineStart)
{
line[index] = toupper(line[index]);
lineStart = false;
}

if (line[index] == ' ')
{
if (ispunct(line[index]))
{
index++;
line[index] = toupper(line[index]);
}
else
{
index++;
line[index] = toupper(line[index]);
}
}else
line[index] = tolower(line[index]);
}
lineStart = false;

}

0

Решение

Вот решение, которое должно работать, и, на мой взгляд, немного менее сложно:

#include <iostream>
#include <cctype>

void camelCase(char line[])  {
bool active = true;

for(int i = 0; line[i] != '\0'; i++) {
if(std::isalpha(line[i])) {
if(active) {
line[i] = std::toupper(line[i]);
active = false;
} else {
line[i] = std::tolower(line[i]);
}
} else if(line[i] == ' ') {
active = true;
}
}
}

int main() {
char arr[] = "hELLO, wORLD!";       // Hello, World!
camelCase(arr);
std::cout << arr << '\n';
}

Переменная active отслеживает, следует ли преобразовывать следующую букву в заглавную. Как только мы преобразовали письмо в заглавную форму, active становится ложным, и программа начинает преобразовывать буквы в строчную форму. Если есть место, active устанавливается в значение true, и весь процесс начинается снова.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]