2016-04-05 7 views
0

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

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

.word

«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

Я бы сказал, что эта логика слишком сложна, учитывая задание ... –

+0

Используйте больше булевых флагов. Не переходите к следующему индексу, иначе вы будете писать за конец строки. – kay

+0

Евгений, я знаю. Я бы не был здесь, если бы мой код был совершенным. – RyeMan

ответ

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

Это точно. Спасибо за помощь! – RyeMan