簡體   English   中英

如何將C中數組中每個單詞的第一個字母大寫

[英]How to capitalize the first letter of each word in an array in C

我試圖創建一個簡單的程序,將一個用戶輸入的句子存儲在一個最多80個字符的數組中,然后將句子中的每個單詞大寫。 我想我正在走上正軌,但是當我運行程序時,只會顯示句子的第一個單詞。

#include<stdio.h>
 int main(void)
{   
 int i;         /*indexing integer*/
 char sen[81]; /*specify total of 80 elements*/
 printf("Enter a sentence no longer than 80 characters: \n\n");
 scanf("%s",sen);
 if((sen[0]>='a') && (sen[0]<='z'))
 {
  sen[0]=(char)(sen[0]-32); /*-32 in ascii to capitalize*/
 }
  for(i=0;sen[i]!='\0';i++)   /*loop until null character*/
  {
  if(sen[i]==' ')             /*if space: next letter in capitalized*/
   {
    if((sen[i+1]>='a') && (sen[i+1]<='z'))
    sen[i+1]=(char)(sen[i+1]-32);
   }
  }
  printf("%s",sen);     
  return 0;
}

我有一種感覺,它只是打印數組中的第一個單詞,因為scanf之后的第一個if語句,但我不完全確定。 任何幫助,將不勝感激。 謝謝。

我有一種感覺,因為scanf之后的第一個if語句,它只打印數組中的第一個單詞

不,那是因為%s說明符使scanf()掃描到第一個空格。 如果要獲取整行文本,請使用fgets()

char sen[81];
fgets(sen, sizeof(sen), stdin);

默認情況下, %s轉換說明符會導致scanf停在第一個空白字符處。 因此,您可以使用%80[^\\n]格式或fgets函數。

#include <stdio.h>

scanf("%80[^\n]", sen);

要么:

#include <stdio.h>

fgets(sen, sizeof sen, stdin);

但是,由於scanf讀取格式化數據 ,因此人類輸入不適合此類讀數。 所以fgets在這里應該會更好。

當你想要多個單詞作為輸入時不要使用scanf:使用gets()或fgets()..我用gets()和puts()運行你的代碼並且它工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM