【題目】
給定乙個指定字串str,返回str的統計字串。例如,「aaabbadddffc"的統計字串為
「a_3_b_2_a_1_d_3_f_2_c_1」。
補充問題:給定乙個字串的統計字串cstr,再給定乙個整數index,返回ctsr所代表的原始字串的第index個字元。例如,「a_1_b_100"所代表的原始字串上第0個字元是』a』,第50個字元是』b』。
【解答】
原問題。解決原問題的方法很多,如下是一種解法。具體過程如下:
1、如果str為空,那麼統計字串不存在。
2、如果str不為空。首先生成string型別的變數res,表示統計字串,還有整型變數num,代表當前字元的數量。初始時字串res只包含str的第0個字元(str[0]),同時num=1。
3、從str[1]位置開始,從左到右遍歷str,假設遍歷到i位置。如果str[i] = str [i-1],說明當前連續出現的字元str[i-1]還沒結束,令num++,然後繼續遍歷下乙個字元。如果str[i] != str [i-1],說明當前連續出現的字元(str[i-1])已經結束,令 res=res+」"+num+"」+str[i],然後令 num=1,繼續遍歷下乙個字元。以題目給出的例子進行說明,在開始遍歷"aaabbadddffc"之前,res=「a」,num=1。遍歷 str[1~2]時,字元』a』一直處在連續的狀態,所以 num 增加到 3。遍歷 str[3]時,字元』a』連續狀態停止,令 res=res+""+「3」+""+「b」(即"a_3_b"),num=1。遍歷 str[4],字元』b』在連續狀態,num 增加到 2。遍歷 str[5]時,字元』a』連續狀態停止,令 res 為"a_3_b_2_a",num=1。 依此類推,當遍歷到最後乙個字元時,res 為"a_3_b_2_a_1_d_3_f_2_c",num=1。
具體過程請參看如下**中的 getcountstring 方法。
【**】
public string getcountstring
(string str)
char
chs = str.
tochararray()
; string res = string.
valueof
(chs[0]
);int num =1;
for(
int i =
1; i < chs.length; i++
)else
}return
concat
(res, string.
valueof
(num),""
);}public string concat
(string s1, string s2, string s3)
補充問題。求解的具體過程如下:
1.布林型變數 stage,stage 為 true 表示目前處在遇到字元的階段,stage 為 false 表示目前
處在遇到連續字元統計的階段。字元型變數 cur,表示在上乙個遇到字元階段時,遇到的是 cur
字元。整型變數 num,表示在上乙個遇到連續字元統計的階段時,字元出現的數量。整型變數
sum,表示目前遍歷到 cstr 的位置相當於原字串的什麼位置。初始時,stage=true,cur=0(字
符編碼為 0 表示空字元),num=0,sum=0。
2.從左到右遍歷 cstr,舉例說明這個過程,cstr=「a_100_b_2_c_4」,index=105。遍歷完
str[0] == 『a』後,記錄下遇到字元』a』,即 cur=『a』。遇到 str[1]== 『』,表示該轉階段了,從遇到字元的
階段變為遇到連續字元統計的階段,即 stage=!stage。遇到 str[2]== '1』時,num=1;遇到 str[3]== 『0』
時,num=10;遇到 str[4]== 『0』時,num=100;遇到 str[5]==』』,表示遇到連續字元統計的階段變
為遇到字元的階段;遇到 str[6]==『b』,乙個新的字元出現了,此時令 sum+=num(即 sum=100),
sum 表示目前原字串走到什麼位置了,此時發現 sum 並未到達 index 位置,說明還要繼續遍
歷,記錄下遇到了字元』b』,即 cur=『b』,然後令 num=0,因為字元』a』的統計已經完成,現在 num
開始表示字元』b』的連續數量。也就是說,每遇到乙個新的字元,都把上乙個已經完成的統計數
num 加到 sum 上,再看 sum 是否到達 index,如果已到達,就返回上乙個字元 cur,如果沒到達,
就繼續遍歷。
3.每個字元的統計都在遇到新字元時加到 sum 上,所以當遍歷完成時,最後乙個字元的
統計數並不會加到 sum 上,要單獨加。
具體過程請參看如下**中的 getcharat 方法。
public
char
getcharat
(string cstr,
int index)
char
chs = cstr.
tochararray()
;boolean stage =
true
;char cur =0;
int num =0;
int sum =0;
for(
int i =
0; i != chs.length; i++
)else
if(stage)
num =0;
cur = chs[i];}
else
}return sum + num > index ? cur :0;
//這是index = chars.length 時的情況
}
字串的統計字串
給定乙個字串,統計每乙個字母的出現次數 比如aabbccc,列印出來就是a 2 b 2 c 3 思路還是採取遍歷,注意這幾個題的思路都比較類似 要注意這裡的sstream 這裡的clear 並非清空了緩衝區,而只是重置標誌,如果要重置緩衝區,則應為ss.str include include usi...
字串的統計字串
題目 給定乙個字串str,返回str的統計字串。例如,aaabbadddffc 的統計字串為 a 3 b 2 1 d 3 f 2 c 1 補充題目 給定乙個字串的統計字串cstr,再給定乙個整數index,返回cstr所代表的原始字串上第index個字元。例如,a 1 b 100 所代表的原始字串上...
開心IT字串 反轉字串
題目 用c語言實現反轉字串strrev 函式。思想 迴圈,依次將第乙個字元和最後乙個字元交換,第二個字元和倒數第二個字元交換 終止符 0 不動 面試提問字串的操作,主要是考察幾點 一對指標和字串的理解,二是是否進行合法性檢查,三是返回值是否是恰當。char reversestring char st...