Search code examples
c++c-stringscamelcasingtouppertolower

Converting a cstring to camelcase


So my task is to fill out my function to work with a test driver that feeds it a random string during every run. For this function I have to convert the first character of every word to a capital and everything else must be lower.

It mostly works but the issue i'm having with my code is that it won't capitalize the very first character and if there is a period before the word like:

.word

The 'w' in this case would remain lower.

Here is my source:

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;

}

Solution

  • Here's a solution that should work and is a bit less complicated in my opinion:

    #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';
    }
    

    The variable active tracks whether the next letter should be transformed to an uppercase letter. As soon as we have transformed a letter to uppercase form, active becomes false and the program starts to transform letters into lowercase form. If there's a space, active is set to true and the whole process starts again.