給定乙個字串,字串包含數字,大小寫字母與括號,(包括大括號,中括號和小括號)括號可以巢狀,即括號裡邊可以出現數字和括號,按照如下的跪著對字串進行展開,不需要考慮括號不成對匹配的問題,用例保證括號匹配,同時保證每個數字後面都有括號,不用考慮數字後邊沒有括號的情況,即 2a2(b)這種情況不用考慮。
1)數字表示括號裡的字串重複的次數,展開後的字串不包括括號。
2)字串展開是逆序展開
輸入描述:
輸入乙個長度小於100的字串
輸出描述:
輸出展開後的字串
示例1:輸入輸出示例僅供除錯,後台判斷資料一般不包含示例
輸入 abc3(a)
輸出 aaacba
使用遞迴的思路
遞迴的出口:子串不包含數字時,就返回子串
包含數字時: 進行遞迴
字串的結果是:數字之前的加上重複子串再加上最後的字串
使用結構體儲存子串以及子串的重複次數以及子串開始的位置
子串開始的位置方便擷取數字之前的子串
總之:遞迴中是三部分相加
**:
#include"stdafx.h"
#include#include#includeusing namespace std;
typedef struct childstr
;// 判斷是否包含數字
bool iscontainnumber(string str)
}return flag;
}// 判斷字元是不是數字
bool isnumber(char ch)
// 返回第一級需要重複的字串和重複次數
// 並返回每個子串第一級數字開始的地方
vectorfilterstr(string str)
}if (str[i] == '}' || str[i] == ']' || str[i] == ')')
// 括號前的數字,因為有可能是多位數
if (isnumber(str[i]) && 0 == flag)
if (0 != flag)
else
val = "";
left = i;}}
return childvec;
}string repate(string str, int num)
return result;
}// 遞迴展開字串
string expandstr(string str)
else
result = result + ss + repate(expandstr(cs.str),cs.repnum);
lf = lf + cs.str.length() + 3; // 置換到下乙個開始的地方
}// 拼接最右側括號右側的字串
if (lf < str.length())
}return result;
}}int main()
string result = val;
if (iscontainnumber(val))
// 逆序輸出
for (int i = result.length() - 1; i < result.length(); i--)
system("pause");
return 0;
}
Mysql數字字串按照數字排序
mysql字串相信大家都不陌生,在mysql字串排序時經常會遇到一些問題,比如下面的這 今天解決了乙個關於mysql字串排序的很奇怪的問題,在資料裡面定義的是varchar型別,實際存放的是int型別的資料,按一下查詢語句進行排序 將字段 1或者 0可以將mysql字串欄位按數值排序 如 selec...
MySQL 數字字串按照數字排序
乙個關於mysql字串排序,在資料裡面定義的是varchar型別,實際存放的是int型別的資料,按一下查詢語句進行排序 將字段 1或者 0可以將mysql字串欄位按數值排序 如 1 select from table where 1order by id 1desc 或者1 select from ...
演算法題 字串旋轉
對於乙個字串,和字串中的某一位置,請設計乙個演算法,將包括i位置在內的左側部分移動到右邊,將右側部分移動到左邊。給定字串a和它的長度n以及特定位置p,請返回旋轉後的結果。測試樣例 abcdefgh 8,4 返回 fghabcde 正常解法 1.用 按特定位置訪問逐字元拷貝 class stringr...