C語言找出最長的連續空格space的數目

本帖最後由 haloPaul 於 2019-1-23 12:47 編輯
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. int findLongestSpace(char line[]) {


  5. int i = 0, count = 0, longest = 0;
  6. while (line[i] != '\0') {

  7.         if (line[i] == ' ')
  8.         count++;
  9.         i++;
  10.        
  11. }
  12. return count;
  13. }

  14. int main() {
  15.         int count;
  16.         char s[4][256] = {"I  love   you    forever", "AAABBB   CCC", "  AAA B  CC", "DDD  "};

  17.         int i;
  18.         for (i=0; i<4; i++) {
  19.                 count = findLongestSpace(s[i]);
  20.                 printf("%s %d\n", s[i], count);
  21.         }
  22.         return 0;
  23. }
複製代碼
以上的程式碼只能找到每一個字串空格的數目,例如"I  love   you    forever"出現9,
"AAABBB   CCC"出現3, "  AAA B  CC"出現5,"DDD  "出現2。

但是我想找出一個字串最長的連續空格space的數目,這個程式碼該怎樣寫呢?
例如計算出"I  love   you    forever"最長的連續空格space的數目是4。

  1. #ifndef MAX
  2.         #define MAX( a, b ) ( ((a) > (b)) ? (a) : (b) )
  3. #endif


  4. int main() {
  5.         int count;
  6.         char s[4][256] = {"I  love   you    forever", "AAABBB   CCC", "  AAA B  CC", "DDD  "};

  7.         int maxCount = 0;
  8.         for (int i=0; i<4; i++) {
  9.                 maxCount = MAX(maxCount, findLongestSpace(s[i]));
  10.         }
  11.         printf("%s %d\n", s[i], maxCount);
  12.         return 0;
  13. }
複製代碼

TOP

回覆 2# hi20


    不好意思,在compiler編譯不到,是哪裡出錯了嗎?

TOP

功課?  
你咪數住每次有幾多連續空格, 記低最大果個

以上的程式碼只能找到每一個字串空格的數目,例如"I  love   you    forever"出現9,
"AAABBB   CCC"出現3 ...
haloPaul 發表於 2019-1-23 11:56

TOP

在 findLongestSpace 內
你諗吓一段空白完果陣 line[i] 係點
當時 count 代表咩數字
咁如果 longest 係當時最長的空白的長度你要點比較佢同 count
同點修改 longest 去反映
之後點樣改 count 去準備遇到下一段空白

TOP

回覆 3# haloPaul
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. #ifndef MAX
  5.         #define MAX( a, b ) ( ((a) > (b)) ? (a) : (b) )
  6. #endif

  7. int findLongestSpace(char line[]) {


  8. int i = 0, count = 0, longest = 0;
  9. while (line[i] != '\0') {

  10.         if (line[i] == ' ')
  11.         {
  12.             count++;
  13.         }else{
  14.             longest = MAX(longest,count);
  15.             count = 0;
  16.         }
  17.         i++;
  18.         
  19. }

  20. longest = MAX(longest,count);

  21. return longest;
  22. }

  23. int main() {
  24.         int count;
  25.         char s[4][256] = {"I  love   you    forever", "AAABBB   CCC", "  AAA B  CC", "DDD  "};

  26.         int i;
  27.         for (i=0; i<4; i++) {
  28.                 count = findLongestSpace(s[i]);
  29.                 printf("%s %d\n", s[i], count);
  30.         }
  31.         return 0;
  32. }
複製代碼

TOP

本帖最後由 haloPaul 於 2019-1-23 17:01 編輯

回覆 6# hi20

唔該您呀,程式能夠正常運行
以下是由預設值字串改為由鍵盤輸入字串的程式碼,但是運行結果不對,請問哪裏出錯了?
Thank you very much~
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. #ifndef MAX
  5.         #define MAX( a, b ) ( ((a) > (b)) ? (a) : (b) )
  6. #endif

  7. int findLongestSpace(char line[]) {


  8. int i = 0, count = 0, longest = 0;
  9. while (line[i] != '\0') {

  10.         if (line[i] == ' ')
  11.         {
  12.             count++;
  13.         }else{
  14.             longest = MAX(longest,count);
  15.             count = 0;
  16.         }
  17.         i++;
  18.         
  19. }

  20. longest = MAX(longest,count);

  21. return longest;
  22. }

  23. int main() {
  24.         char text[30];
  25.         int count;
  26.         scanf("%s", text);
  27.         count = findLongestSpace(text);
  28.         printf("%s %d\n", text, count);
  29.         
  30.         return 0;
  31. }
複製代碼

TOP

回覆  hi20

唔該您呀,程式能夠正常運行
以下是由預設值字串改為由鍵盤輸入字串的程式碼,但是運行結果不 ...
haloPaul 發表於 2019-1-23 16:58

你咁樣係學唔識寫PROGRAM
你嘅問題要SPECIFIC 啲

你淨係POST 個PROGRAM出嚟話唔岩,問人點解
不如你自己學下點DEBUG,做啲LOG 又好,一句句CODE TRACE 又好,自己睇返邊度開始出現啲唔岩嘅結果

TOP

回覆 4# java2


    應該係,當年我ICT 都係有份咁既野,不過果時用pascal

TOP

入乜乜/錯乜唔講, 仲係話錯問哪裏出錯.
學樓上講自己學下debug 啦.

回覆  hi20

唔該您呀,程式能夠正常運行
以下是由預設值字串改為由鍵盤輸入字串的程式碼,但是運行結果不對,請問哪裏出錯了?
haloPaul 發表於 2019-1-23 16:58

TOP