2017-02-03 35 views
0

對於我正在做的任務,我必須從C(或字符數組)中的字符串中打印出首字母。要做到這一點,我知道我需要找到SPACE的位置,使用(int)name [i] == 32來查找當前字符是否爲空格。我唯一的問題是,我無法弄清楚如何找到空間,然後將下一個字符存儲在字符數組中。 (例如,用戶輸入Mike Baggins,我必須打印出MB)。我會在下面發佈我的代碼,向您展示我已經獲得了多少。請幫忙,但請不要給我完整的解決方案。謝謝!試圖抓住一個空格後的字符C

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

int main(void) 
{ 
    string name = get_string(); // gets the user's input 
    char firstI = name[0]; // stores the first character from the user's input 
    int len = strlen(name); 
    if((int)firstI >= 97 && (int)firstI <= 122) // checks if the character is lowercase 
    { 
     firstI -= 32; // makes the value uppercase 
    } 
    for(int i = 0; i < len; i++) 
    { 
     if((int)name[i] == 32) // checks if the character is SPACE 
     { 
      printf("I found a space!\n"); // prints out "I found a space" 
     } 
    } 
    printf("%c\n", firstI); // prints out the first initial 
} 
+3

你爲什麼要'名字[我]'?使用'name [i] =='''!另外'for(int i = 0,len = strlen(name); i

+4

有便利和便攜功能'islower'和'toupper' ...而且你並不需要第一個。 –

+0

你是什麼意思,「表示你不知道如何表示字符串」。使用strlen()來獲取分析字符串的全長很容易,所以我簡單地使用了strlen()。 – Nik

回答

1

它實際上是簡單的,看到這個例如

#include <stdio.h> 
#include <ctype.h> 

int 
main(void) 
{ 
    char array[10]; 
    char string[] = "Mike Baggins"; 
    int j; 
    // Always put the first non-whitespace 
    // character (we should probably skip all 
    // spaces first 
    array[0] = string[0]; 
    // Now start at the character following the first 
    j = 1; 
    for (int i = 1; ((string[i - 1] != '\0') && (j < sizeof(array) - 1)); ++i) { 
     if (string[i - 1] == ' ') { 
      array[j++] = toupper(string[i]); 
     } 
    } 
    array[j] = '\0'; 
    puts(array); 
    return 0; 
} 

所有我需要的是知道字符串是簡單地用一個特殊的值標記它們與RIGHTARROW的高端陣列; '\0'。當然,你可以改進很多。例如,您可以計算輸入字符串中有多少首字母,並分配足夠的空間來存儲它們。

此外,只有當有趣的角色立即跟隨空間,但知道它只是一個數組,我相信你可以弄清楚如何擴展它以忽略連續的空格。

+0

有趣... -1! –

+0

啊!我明白你的意思了!我確實知道它們在內存中表現得像那樣,但是我看到整個字符串(包括白色空格標記(SPACE)本身就是一個字符串,並且認爲使用'\ 0'將毫無意義)。謝謝!我現在會亂搞我的計劃,看看我能否實現它。謝謝! – Nik

+0

@Nik,即使這是一個簡單的概念,我發現許多學習c的人都不知道它。另外,這個想法可以擴展到其他類型的對象,比如指針,你可以有一系列以NULL結尾的指針並以相同的方式迭代,實際上這就是鏈表背後的想法。 –