public static void Main()
string testString = "AN UPERCASE TEST STRING! HERE ARE SOME MORE WORDS";
Console.WriteLine(FirstLetterOfWordToLowercase(testString));
Console.WriteLine(LastLetterOfWordToLowercase(testString));
Console.WriteLine(FirstAndLastLetterOfWordToLowercase(testString));
private static string FirstAndLastLetterOfWordToLowercase(string stringToTransform)
char[] stringCharacters = stringToTransform.ToCharArray();
for (int charIndex = 0; charIndex < stringCharacters.Length; charIndex++)
char currentCharacter = stringCharacters[charIndex];
if (!isWordSepparator(currentCharacter))
if (charIndex == 0 || charIndex == stringCharacters.Length -1 || (charIndex > 0 && isWordSepparator(stringCharacters[charIndex - 1])) || isWordSepparator(stringCharacters[charIndex +1]))
stringCharacters[charIndex] = char.ToLower(currentCharacter);
return new string(stringCharacters);
private static string FirstLetterOfWordToLowercase(string stringToTransform)
char[] stringCharacters = stringToTransform.ToCharArray();
for (int charIndex = 0; charIndex < stringCharacters.Length; charIndex++)
char currentCharacter = stringCharacters[charIndex];
if (!isWordSepparator(currentCharacter))
if (charIndex == 0 || (charIndex > 0 && isWordSepparator(stringCharacters[charIndex - 1])))
stringCharacters[charIndex] = char.ToLower(currentCharacter);
return new string(stringCharacters);
private static string LastLetterOfWordToLowercase(string stringToTransform)
char[] stringCharacters = stringToTransform.ToCharArray();
for (int charIndex = 0; charIndex < stringCharacters.Length; charIndex++)
char currentCharacter = stringCharacters[charIndex];
if (!isWordSepparator(currentCharacter))
if (charIndex == stringCharacters.Length -1 || isWordSepparator(stringCharacters[charIndex +1]))
stringCharacters[charIndex] = char.ToLower(currentCharacter);
return new string(stringCharacters);
private static bool isWordSepparator(char character)
return char.IsPunctuation(character) || char.IsSeparator(character);