Board logo

標題: C語言找出最長的連續空格space的數目 [打印本頁]

作者: haloPaul    時間: 2019-1-23 11:56     標題: 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。
作者: hi20    時間: 2019-1-23 12:26

  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. }
複製代碼

作者: haloPaul    時間: 2019-1-23 12:54

回覆 2# hi20


    不好意思,在compiler編譯不到,是哪裡出錯了嗎?
作者: java2    時間: 2019-1-23 12:57

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

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

作者: smoke_cheese    時間: 2019-1-23 12:57

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

回覆 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. }
複製代碼

作者: haloPaul    時間: 2019-1-23 16:58

本帖最後由 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. }
複製代碼

作者: masseffect    時間: 2019-1-23 17:06

回覆  hi20

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

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

你淨係POST 個PROGRAM出嚟話唔岩,問人點解
不如你自己學下點DEBUG,做啲LOG 又好,一句句CODE TRACE 又好,自己睇返邊度開始出現啲唔岩嘅結果
作者: a886    時間: 2019-1-23 18:04

回覆 4# java2


    應該係,當年我ICT 都係有份咁既野,不過果時用pascal
作者: java2    時間: 2019-1-23 18:44

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

回覆  hi20

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

作者: java2    時間: 2019-1-23 18:45

遲D 可能係同一問題但用java

回覆  java2


    應該係,當年我ICT 都係有份咁既野,不過果時用pascal
a886 發表於 2019-1-23 18:04

作者: a886    時間: 2019-1-23 18:57

回覆 11# java2


    考評受java 先算啦
啲題目仲問緊史前題目,學完都用唔番工作上
作者: bongbong3481    時間: 2019-1-23 22:46

回覆 9# a886


我以前中學都係學PASCAL, 老實講,如果當年學BASIC/ visual basic, 我深信我而家玩VBA, 可以去到好高水準
作者: a886    時間: 2019-1-23 23:22

回覆 13# bongbong3481


    你可以自修,當年有個同學功課照交PASCAL,CE份野交VB用哂MS俾既function ,我地PASCAL就慘自己寫function出黎
作者: laputafish    時間: 2019-1-24 09:25

回覆  bongbong3481


    你可以自修,當年有個同學功課照交PASCAL,CE份野交VB用哂MS俾既function ,我地PA ...
a886 發表於 2019-1-23 23:22


如果個tutor衹著重結果, 咁用VB果個真係醒目D.
作者: 1234950    時間: 2019-1-24 21:36

回覆  hi20

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


scanf 好似食唔到空格   ...好似係
作者: 1234950    時間: 2019-1-24 21:41

回覆 12# a886


我幾年前考DSE好似受JAVA

冇記錯受C, PASCAL, VB, JAVA?
作者: 燒浩    時間: 2019-1-25 10:07

回覆 16# 1234950

用 gets() 應該可以解決。
作者: othree    時間: 2019-1-25 10:37

Debug 要人教唔會進步到
作者: a886    時間: 2019-1-25 18:28

回覆 17# 1234950


    近幾年好似OK,不過我果時好似無寫話得
作者: 1234950    時間: 2019-1-25 18:45

回覆 20# a886


    記得個陣第一頁 有4格比你TICK.用咩語言
其中有JAVA所以應該可以
作者: a886    時間: 2019-1-25 18:49

回覆 21# 1234950


    如果筆試我果時係得PASCAL 同 C, 係份Project 先可以用VB ,PASCAL 同 C

不過依家Project, JAVA都OK
作者: easytone    時間: 2019-1-28 16:02

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, char *argv[]){

  4.         char str[100];
  5.         int i=0, count=0, max=0;

  6.         printf("Please enter a string: ");
  7.         fgets(str,100,stdin);

  8.         for (i=0;i<=strlen(str);i++){
  9.                 if (str[i] == ' ')
  10.                         count++;
  11.                 else {
  12.                         if (count > max)
  13.                                 max = count;
  14.                         count = 0;
  15.                 }
  16.         }
  17.         printf("The longest space is %d long\n", max);
  18. }
複製代碼
$ ./test
Please enter a string: I   like     swimming and  hiking.
The longest space is 5 long





歡迎光臨 電腦領域 HKEPC Hardware (https://h1.hkepc.com/forum/) Powered by Discuz! 7.2