#16376: C的,不是C++


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [27.52.77.116] | 發表日期 : 2018-12-25 19:39

提示裡有說,要用 sscanf(),然而重點是對 C 而言要怎麼跳過 空白

這就要靠強大的指標來處裡了

sscanf( 來源字串的指標 , 指定格式 , 對應變數/陣列/指標 )

第一個是 來源字串的指標  是測資裡的一行字串,前面用 gets() 包含空白整個讀取

然後用 當做索引,要取想要的指標就用  &str[ i ] 就好,方便移動 i 值

第二個是 指定格式 ,這裡用  "%s"  讀,因為每個單字都有空白隔開,所以不會讀到其他單字

第三個是 對應變數/陣列/指標 ,本題是存取單字用的,所以用一個字元陣列

 

至於空白怎麼跳,首先是一開始,要處理第一個單字前可能的空白, 用while(str[i]==' ')

只要是空白 i 就加一,這個迴圈跳出時 str[i] 就是第一個單字的開頭

然後是 while(sscanf()!=EOF) 在裡面處理每個單字,每次處理完 i 要加單字的長度跳過這個字

然後就跟前面一樣,跳過空白,用 sscanf( &str[i] , .... , ....) 讀下一個字

當讀到結束字元就可以輸出答案了

以上是 C 的方法,敬請指教

 
#28244: Re:C的,不是C++


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [1.200.33.17] | 發表日期 : 2021-11-20 16:25

提示裡有說,要用 sscanf(),然而重點是對 C 而言要怎麼跳過 空白

這就要靠強大的指標來處裡了

sscanf( 來源字串的指標 , 指定格式 , 對應變數/陣列/指標 )

第一個是 來源字串的指標  是測資裡的一行字串,前面用 gets() 包含空白整個讀取

然後用 當做索引,要取想要的指標就用  &str[ i ] 就好,方便移動 i 值

第二個是 指定格式 ,這裡用  "%s"  讀,因為每個單字都有空白隔開,所以不會讀到其他單字

第三個是 對應變數/陣列/指標 ,本題是存取單字用的,所以用一個字元陣列

 

至於空白怎麼跳,首先是一開始,要處理第一個單字前可能的空白, 用while(str[i]==' ')

只要是空白 i 就加一,這個迴圈跳出時 str[i] 就是第一個單字的開頭

然後是 while(sscanf()!=EOF) 在裡面處理每個單字,每次處理完 i 要加單字的長度跳過這個字

然後就跟前面一樣,跳過空白,用 sscanf( &str[i] , .... , ....) 讀下一個字

當讀到結束字元就可以輸出答案了

以上是 C 的方法,敬請指教


這題我是用strtok()來解的。

首先用fgets讀取整行,然後用strtok()分割字串,分隔後判斷是否整個字都是數字

 
ZeroJudge Forum