#16376: C的,不是C++


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

School : No School
ID : 88611
IP address : [39.8.203.54]
Last Login :
2019-05-30 22:56:25
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [27.52.77.116] | Post Date : 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)

School : No School
ID : 30877
IP address : [118.160.184.173]
Last Login :
2022-05-18 00:56:34
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [1.200.33.17] | Post Date : 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