![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 張紹融 ![]()
![]() |
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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |