C語言字串處理相關問題

2021-10-14 09:29:12 字數 1753 閱讀 6988

在最近翻閱《c程式設計》一書時,在6.3.7節字串陣列應用舉例中我發現了乙個值得學習的例子。

題目如下:輸入一行字元,統計其中有多少個單詞,單詞之間用空格隔開

這個程式的設計思路並不難,我們對單詞的特性很清楚,只要有空格說明出現了單詞數量變化。而為了避免因為輸入不規範出現多個空格影響單詞個數判斷錯誤,所以應該有兩個判斷條件共同判斷。在迴圈中,第一次判斷為此處是否為空格,如果是,就說明這個位置沒有單詞,單詞符「word」賦0,如果不是,就說明這個地方有字母,再進行第二次判斷,這次是關於」word「值的判斷,如果為0說明這個位置為乙個單詞的開頭,單詞數加一。如果"word"值不為0,說明這個位置之前還有字母,在這之前為乙個單詞的開頭,這個位置不需要再計算單詞數。

**如下:

#include

intmain()

}printf

("there are %d words in this line.\n"

,num)

;return0;

}

執行結果:

程式分析:我認為這個程式設計思路的特點在於解決了利用之前迴圈結果來對當前迴圈進行處理的問題,具體體現在對"word"的賦值使用中。本程式通過第一次判斷,來確定每一次迴圈所在位置是否有字母,有字母的更進一步意義就是這個位置有單詞,word置1(這個步驟在第二個迴圈中),而如果是空格,說明這個位置沒有單詞,word置1。通過對word賦值的不斷改變,我們可以「保留」上一次迴圈的結果,這樣能完成我們對單詞首字母的尋找。

對於字串,我們想做的當然不止步於數有多少個單詞,在《c程式設計》一書中,在上文所述問題之後是乙個找最大字串的問題(例6.9),這個問題很簡單,在這裡我就不過多贅述了,但由此延伸,我們不難想到多個字串陣列排序問題。在之前我有說過選擇法對姓名排序的方法,就是對應著這個問題,這一次我將採用冒泡法處理它。

**如下:

#include

"stdio.h"

#include

"string.h"

intmain()

for(

int j=

1;j<

4;j++

)for

(int k=

1;k<

4-j;k++)}

printf

("由小到大排列為:");

for(

int i=

1;i<

4;i++

)return0;

}

冒泡法的核心思想是逐個位置確定。具體來說對n個元素構成的陣列,迴圈(n-1)次。第一次迴圈比較(n-1)次,確定第n個元素,第二次迴圈比較(n-2)次,確定第(n-1)個元素,依此類推,直至全部確定下來。這個過程需要用到兩個迴圈巢狀,是較難思考的部分,上述程式中這段**為:

for

(int j=

1;j<

4;j++

)for

(int k=

1;k<

4-j;k++

)}

對於字串的處理,其實只是多出了strcpy函式(因為字串陣列不能直接賦值)。總體思路難在巢狀迴圈的迴圈判別式上。

c語言字串相關

在c語言中,有兩個函式可以在控制台 顯示器 上輸出字串,分別是 在c語言中,有兩個函式可以讓使用者從鍵盤上輸入字串,它們分別是 但是,scanf 和 gets 是有區別的 strcat 是 string catenate 的縮寫,意思是把兩個字串拼接在一起,語法格式為 strcat arraynam...

C語言字串處理

字串 char str 20 char str1 5 str1 1 x str1 3 y int i 0 for i 0 i 5 i char str2 0表示字串結束 printf s str2 定義大小時,要比實際大1.存放 0 與字串相關的函式 需要匯入標頭檔案 include char st...

字串處理(c語言)

提交 統計 提問 題目描述 讀入兩個字串,字串除了數字還可能包括 e e 相加之後輸出結果,如果是浮點型,要求用科學計數法表示 最多包含10個有效數字 輸入描述 輸入包含多組測試資料。每組輸入佔兩行,每行乙個字串,測試資料保證字串的構成嚴格按照題目中的描述。輸出描述 輸出兩個數字相加的結果,每組輸出...