Это известная проблема с именами — вещи крайне противоречивы. Прочтите эту статью для получения дополнительной информации: http://www.w3.org/International/questions/qa-personal-names
В вашем примере вы ссылаетесь на фамилию «VAN BEBBER», которую вы хотите написать с большой буквы как «Van Bebber». Однако, как указано в статье, существуют и другие комбинации из других регионов мира, которые разрушили бы большинство попыток стандартизации — например, фамилия «БИН ОСМАН» была бы правильно написана с заглавной буквы как «бин Osman» — без заглавной буквы «b» в слове «bin», что означает «сын» и, следовательно, не очень хорошо вписывается в прозападную концепцию фамилии.
Вы упомянули, что разделили фамилии тире, что, скорее всего, исходит из идеи написания фамилии через дефис - вы также проверяете имя на тире? На сайте приводится пример имени «Мария-Хосе Карреньо Киньонес», который довольно сложно разобрать из-за двойного имени (разделенного дефисом), а также двойной фамилии (разделенного пробелом). Как бы ваша программа справилась с таким названием?
Чтобы ответить на ваш вопрос более прямо, не вводя больше крайних случаев - вы уже знаете, как разделить строку с помощью тире - если вы хотите покрыть регистр фамилий пробелами, вам следует дополнительно разделить строку фамилии пробелами, и только затем сделайте заглавной первую букву разных разделенных строк.
В качестве альтернативы, как упомянул Дай в комментарии, вы можете использовать метод ToTitleCase
— дополнительная информация здесь: https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase(v=vs.110).aspx Это, скорее всего, лучшее решение, чем пытаться сделать свое собственное. Однако эта страница ссылается на тот факт, что не все языки пишутся с заглавных букв одинаково (и действительно, разные фамилии могут происходить из разных областей/культур/языков), и поэтому установка правильного языка не всегда может привести к правильному использованию заглавных букв в фамилии. Обратите внимание, что "BIN OSMAN" будет написано с заглавной буквы как "Bin Osman", что технически неверно.
Вот быстрый пример с этой страницы:
// Defines the String* with mixed casing.
String^ myString = "wAr aNd pEaCe";
// Creates a TextInfo based on the "en-US" culture.
/**** Personal Note - en-US may not be the correct culture for every last name! ****/
CultureInfo^ MyCI = gcnew CultureInfo( "en-US",false );
TextInfo^ myTI = MyCI->TextInfo;
// Changes a String* to lowercase. Outputs "War and Peace"
Console::WriteLine( "\"{0}\" to titlecase: {1}", myString, myTI->ToTitleCase( myString )
person
Jake
schedule
13.10.2015
ToTitleCase
. - person Dai   schedule 13.10.2015