2016-09-19 4 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文字をintenedとして比較するだけではありません(元のstrncmp(&user_name[i], " ", 1)のように)。

とにかくstr [n] cmp()を使用する理由は、if (name[i] == ' ') { ...だけではないのはなぜですか?

+0

私は最後の文字を比較しようとしています。名前が「バラク・フセイン・オバマ」の場合は、「H」と「O」の前の文字に空白があるかどうか質問したい。もしそうなら、私はそれが単語の始まりであることを知っているでしょう。 – rebbailey

+2

@rebbaileyそれはちょうど問題です、 'strcmp'は文字列全体を比較することを意味しますが、実際には1文字を比較したいだけです。 –

関連する問題