台灣最大程式設計社群網站
線上人數
684
 
會員總數:243462
討論主題:188180
歡迎您免費加入會員
討論區列表 >> C/C++ >> 字串轉換並排列
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
字串轉換並排列
價值 : 10 QP  點閱數:283 回應數:7

樓主

張紹融
門外漢
0 6
130 37
發送站內信

輸入一個字串n,字串格式為(#字串##),其中字串n的長度不超過50,將其字串轉換成大寫英文後並排列後輸出(小到大)。

測試範例:
輸入:#ApplE##
輸出:AELPP


下列為(大到小的排列)


結果





改動泡沫排列(小到大)



結果

哪裡錯了嗎

搜尋相關Tags的文章: [ 字串轉換 ] , [ 排列 ] , [ 泡沫排列法 ] ,
本篇文章發表於2018-06-23 16:26
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

張紹融
檢舉此回應
抱歉排版錯誤
題目是這樣

輸入一個字串n,字串格式為(#字串##),其中字串n的長度不超過50,將其字串轉換成大寫英文後並排列後輸出(小到大)。

測試範例:
輸入:#ApplE##
輸出:AELPP
本篇文章回覆於2018-06-23 16:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
由小排到大,
#轉換成的'\0'永遠排在最前面,那字串永遠是空值,既然知道第一個字是#,就要特別處理。
(正常來說要判斷,這裡假設永遠是#)

n[j]='#' 應該改成 n[j]=='#',所以你才需要多加前面那個判斷...

氣泡排序應該是這樣


我把多餘的省略,大約改成下面這樣


本篇文章回覆於2018-06-23 17:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

張紹融
檢舉此回應
第18 19 20行

這邊是假設第一個輸入永遠是#
輸出從n[1]開始 是這樣嗎?


-----------------------------------------------------------
第22-34行



#include<string>
可以註解一下是什麼意思嗎
----------------------------------------------------------
for迴圈為什麼沒有大括號也能執行呢?

三個問題煩麻幫我解答 謝謝小魚大大
本篇文章回覆於2018-06-23 21:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

張紹融
檢舉此回應
strlen所作的僅僅是一個計數器的工作,它從內存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第一個字符串結束符'\0'為止,然後返回計數器值。
--就是指實際字符串或字符數組的實際長度(不是所佔空間的字節數)。
本篇文章回覆於2018-06-23 21:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

小魚
檢舉此回應
1.正常來說輸入完要先判斷是符合我們要的格式,否則這個程式執行起來結果有可能會不一樣

2.strlen是字串長度,以 0('\0') 結尾,這上面有詳細說明了

3.因為你說一定是#開頭,那處理後第一個字就會是'\0',不管用strlen或是for迴圈用n[i] != '\0'判斷都會沒有東西
所以我先用n[0] = n[1]處理第一個字元,再將整個字串往前移1個字元

4.#include <string> 是因為strlen需要載入<string>這個標頭檔
C++是 <string>
如果是C的話似乎是 <string.h>

5.for迴圈底下如果只有一列,可以不用大括號,如果底下很多列但沒有大括號,for迴圈只會對第一列有作用。
本篇文章回覆於2018-06-24 09:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

張紹融
檢舉此回應




迴圈裡面的
int length = strlen(n)跟length
不太懂它的邏輯
本篇文章回覆於2018-06-24 15:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

小魚
檢舉此回應
int length = strlen(n);
是字串的長度,
我們要排序的只有字串的部分而已,超過字串的部分排序就沒意義了,
而且如果從小排到大,
0('\0')應該是最小的,
得到的字串只會是空的。
本篇文章回覆於2018-06-24 21:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.