2013-11-18 5 views
1

Я хочу использовать первую букву каждого слова введенной строки.Простая капитализация первой буквы каждого слова в C

Это то, что я сделал (пока не работает)

void main() { 
    char sentence[100]; 
    int i; 

    printf("Enter your name and surnames: "); 
    gets(sentence); 

    for(i = 0; i<strlen(sentence); i++){ 
     if(sentence[i] == ' '){ 
      printf("%c", toupper(sentence[i]+1)); 
      //I want to advance to next item respect to space and capitalize it 
      //But it doesn't work 
     } else { 
      printf("%c", sentence[i]); 
     } 
    } 
} 

Вход: Джеймсу Кэмерону

Хотела Выход: Джеймс Кэмерон

+2

Использование 'получает()' крайне бедных стиль. Безопасное использование невозможно и было удалено в последней версии стандарта C. –

+5

Интересно, что то же самое было задано 3 часа назад: http://stackoverflow.com/questions/20036553/c-function-to-capitalize-first-letter-of-words-in-a-array –

+1

Также: включите соответствующие заголовочные файлы '#include #include #include ', если вы не ошибаетесь, может случиться – jpw

ответ

1

Так близко.

printf("%c", toupper(sentence[i]+1)); 

Должно быть

printf(" %c", toupper(sentence[i+1])); 
i++; 

Хотя вы, вероятно, следует проверить на конец строки ('\0') тоже.

+0

вывод: James Ccameron – frankie3

+0

Вы добавили 'i ++'? – Kevin

+0

Я забыл i ++: PP – frankie3

1

Используйте strchr/strsep для поиска разделителей слов, а затем измените следующий символ.

char *q, *p = sentence; 
while (p) { 
    q = strchr(p, ' '); 
    if (!q) break; 
    toupper(p[q - p + 1]); 
    p = q; 
} 
0

альтернативный подход: (создать функцию, чтобы извлечь выгоду)

1) Создать дополнительный буфер такой же длины, чтобы содержать модифицированные результаты
2) Set первый символ новой строки в верхний регистр версии оригинальной строки
3) Прогулка по строке, поиск пространства.
4) Установить следующий символ новой строки в верхний регистр полукокса в исходной строке

Пример кода:

void capitalize(char *str, char *new) 
{ 
    int i=0; 

    new[i] = toupper(str[0]); 
    i++;//increment after every look 
    while(str[i] != '\0') 
    { 
     if(isspace(str[i])) 
     { 
      new[i] = str[i]; 
      new[i+1] = toupper(str[i+1]); 
      i+=2;//look twice, increment twice 
     } 
     else 
     { 
      new[i] = str[i];   
      i++;//increment after every look 
     } 
    } 
} 
Смежные вопросы