當字符從' '變為字母時或其他字符時word從0變為1,而word從0變為1時就是一個單詞,所以count+1;當字符由非' '變為' '時word從1變為0,準備判斷下一個單詞的出現,即等待字符由' '變為其他字符的出現。這樣最后count就是記錄了單詞的個數,其實就是記錄了字符由' '變為其他字符的次數!
網站建設哪家好,找成都創新互聯公司!專注于網頁設計、網站建設、微信開發、微信小程序定制開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了華安免費建站歡迎大家使用!
C語言:統計輸入的一行英文句子中的字母及單詞個數,帶注解!
//通過鍵盤輸入一行英文句子,統計其中的英文字母和單詞的數量,單詞之間用空格分開(標點符號不算單詞);
#includestdio.h?
#includestring.h
#includestdlib.h
main()
{
char string[100];//根據擬從鍵盤輸入的字串的長度需要適當調整,要避免輸入的長度超出設定的范圍。
char c;
int i, num=0,sum=0,word=0; //定義 word 用來指示一個單詞是不是結束或新單詞是否開始;
printf("請從鍵盤輸入一行需要查詢的英文句子,進行單詞數量統計:\n\n");
gets(string);?? //從鍵盤獲得輸入的字符串;
//以下統計句子中的英文字符個數;
for(i=0;(c=string[i])!='\0';i++) //for循環語句,遍歷句子中的每個字符;初始化i=0;若字符c!='\0',即未到達結束符'\0'的話,執行i++;
{
if(('A'=string[i]string[i]='Z')||('a'=string[i]string[i]='z'))
sum++;? //以上為條件句,如果字符在A~Z,a~z 范圍之內的話,則執行sum++,累加英文字母個數;
}
//以下統計句子中的英文單詞個數;
for(i=0;(c=string[i])!='\0';i++) //for循環語句,遍歷句子中的每個字符;初始化i=0;若字符c!='\0',即未到達結束符'\0'的話,執行i++;
{????????????????????????????? //'\0'用作字符串的結束符。它的ASCII數值是0。
if(c'A'||c'Z'c'a'||c'z')?? //設定條件:如果字符 c 遇到A~Z和a~z范圍之外其它符號字符的話,包括遇到空格' ';
word=0;????? //上面條件為真時,執行這里,置word=0,表示未遇到單詞,或,一個單詞已結束,同時也意味著要開始遇到下一個新單詞;
else if(word==0)? //當條件(word==0)為真,執行下面花括號里面的語句;當word==0時,表示未遇到字母,即未遇到單詞,或上一個單詞已結束;
{
word=1;?? //那么置word=1,即,表示下一個新單詞開始,
num++;?? //執行num++,累加英文單詞的個數;
}
}
printf("\n");
printf("您輸入的這句英文句子中共包含%d個英文字符,%d個英文單詞。\n",sum,num);
}
示例:輸入語句:? Hello ! My friend , how are you ? (注意單詞的前后有空格)
C語言進階:[14]統計單詞個數
對一段英文文章進行單詞統計,如果剛接觸這樣的問題,感覺比較棘手。要把問題分解開,每一個小問題解決了,然后進行歸并,大問題也就解決了。首先單詞是以字符開始,并且連續個字符,直到下一個字符不是字符結束,并且這個字符不能是數字字符。核心問題就是找出一個單詞。
查找單詞的代碼如下:
首先查詢到第一字符,有可能是單詞,然后連續查找字符,直到遇到第一個不是字符的字符,并且這個字符在本編程中是空字符和標點符號,還得考慮遇到字符串結束符\0。在代碼中難得部分是字符串指針的處理即返回的是下一個可能是單詞的查找開始位置。例如
h ?e ?l ?l ?o? 空格??w ?o ?r ?l ? d
0 ?1 ?2 ?3 ?4 ? ?5 ??6 ?7 ?8 ?9 ? 10
第一次查找,i值指向了空格即i=5,傳過來的索引j指向h,即索引為0,那么結果j應該指向空格即j=5,表達式為j= j+ (i-(e的索引)1 + 1(數量差一)) = j+ i。主程序代碼是:
主程序主要是調用單詞查找函數,每次更新索引值,直到字符串查找完畢。
結果如下:
該程序的缺點是沒有統計單詞的開始和結束位置。
根據英語的書寫習慣,在每個單詞前后都會有空格分隔。 所以可以依據空格來劃分單詞。
不過,由于空格可能存在連續多個,所以僅統計空格數是不可以的,需要更復雜一些的算法。
一、算法設計:
核心思想是通過一個flag,來確定單詞的起始, 每出現一個單詞的起始,則表示存在一個單詞。 這樣統計出現的單詞起始個數,即可獲得單詞總數。
1、flag初始為1;
2、遍歷字符串。
3、對于每個字符,如果出現非空格字符,且flag為1,則為單詞起始,累加計數器。同時賦值flag為0。
4、在flag為0情況下,如果出現空格,表示上一個單詞已經結束,設置flag為1。
5、 遍歷結束后輸出結果。
二、參考代碼:
#include?stdio.h
int?func(char?*s)//計算單詞數函數
{
int?i,n=0,flag=1;
for(i?=?0;?s[i];?i?++)//遍歷
{
if(flag?==?1)
{
if(s[i]?!=?'?')//單詞起始
{
n++;
flag?=?0;
}
}
else?if(s[i]?==?'?')//上一個單詞結束。
flag?=?1;
}
return?n;//返回結果。
}
int?main()
{
char?s[200];
gets(s);//輸入字符串。
printf("%d\n",?func(s));//調用函數,計算并輸出結果。
return?0;
}
Q:輸入一串字符串,輸出其中有多少個單詞。?
Eg:Good Wishes?
A:
#include stdio.h#include string.h#define SIZE 20int main()
{ ? ?char str[SIZE]={'\0'}; ? ?int count=0;
printf("plz input the string\n");
gets(str);
puts(str); ? ?int length = strlen(str); ? ?for (int i=0;ilength;i++)
{
if(str[i]!=' ')
{ ? ? ? ? ? ?count++; ? ? ? ? ? ?while(str[i]!=' 'str[i]!='\0')
{
i++;
}
}
}
printf("%d\n",count); ? ?return 0;
}
‘\0’和‘0’的區別:?
在c語言中,它們都是字符,都用對應的ASCII碼來存儲。例如第一個ASCII碼,0,對應字符為(Null),就是 ‘\0’,即空字符。我們在c語言中判斷一個字符串是否結束的標志就是看是否遇到‘\0’,如果遇到‘\0’,則表示字符串結束。字符‘0’和數字0的區別:前者是字符常量,后者是整形常量,但是字符常量可以像整數一樣在程序中參與相關運算。
擴展資料
字符串所有字符,如果當前字符不為空,單詞數+1,再嵌套一個while循環,判斷當前單詞是否結束。
#include stdio.h
#include string.h
int count_words(char* s)
{
int len=strlen(s);
int count,i;
for(i=0;ilen;i++)
{
if(*(s+i)!=' '){ ?// 如果當前代碼不為空
count++; ?//單詞數+1
while(*(s+i)!=' ' ilen) ?//判斷當前單詞是否結束
i++;
}
}
return count;
}
int main()
{
char* a="i love you";
printf("%d",count_words(a));
}
網頁題目:統計單詞個數C語言函數 c語言統計個數的函數
網址分享:http://m.kartarina.com/article24/dogicje.html
成都網站建設公司_創新互聯,為您提供網站改版、小程序開發、自適應網站、企業建站、App設計、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯