2016-09-19 3 views
-1

Я прошу пользователя ввести строку. Я хотел бы вывести первую букву каждого слова в верхнем регистре.Символ, не сохраняющий массив

Пример: barack hussein obama =>BHO

В настоящее время это моя попытка:

#include <cs50.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 

int main(void){ 
    string user_name = GetString(); 

    int word_counter = 0; 
    int counter = 0; 

    // Get length of string. 
    for(int i = 0; i < strlen(user_name); i++){ 
     if(strncmp(&user_name[i], " ", 1) == 0){ 
      word_counter += 1; 
     } 
    } 
    word_counter += 1; 


    // Declare empty array and size. 
    char output[word_counter]; 

    // Iterate through array to assign first characters to new array. 
    for(int i = 0; i < strlen(user_name); i++){ 
     if(i == 0){ 
      output[counter] = toupper(user_name[i]); 
      counter += 1; 
     } 
     else if(strcmp(&user_name[i - 1], " ") == 0){ 
      output[counter] = toupper(user_name[i]); 
      counter += 1; 
     } 
    } 

    // Output result. 
    for(int i = 0; i < word_counter; i++){ 
     printf("%c\n", output[i]); 
    } 

    printf("\n"); 
} 

Когда выход возвращается, я только получить B. Кажется, что вывод не сохраняет первые буквы каждого слова. Я объявляю вывод неправильно?

+1

'strncmp (& user_name [i]," ", 1) == 0' более просто записывается как' username [i] == '' '. – Barmar

ответ

2

strcmp(&user_name[i - 1], " ") Не просто сравнение 1 char как интендированный (например, ваш оригинал strncmp(&user_name[i], " ", 1).).

Зачем использовать str [n] cmp() в любом случае, почему бы не просто if (name[i] == ' ') { ...?

+0

Я пытаюсь сравнить последний символ. Если имя «Барак Хусейн Обама», я хотел бы спросить, имеет ли символ перед 'H' и' O' пустое пространство. Если так, я узнаю, что это начало слова. – rebbailey

+2

@rebbailey Это просто проблема, 'strcmp' означает сравнивать целую строку, тогда как вы на самом деле хотите сравнить только один символ. –

Смежные вопросы