标题说明了一切 - 我的字符串只能由以空格分隔的数字形成,例如1 0 3 0 4 0 7 0.我想要做的是删除最常出现的字符然后得到1 3 4 7.总会有一个数字重复。我尝试了这个,但它只删除了重复项,而不是实际出现的字符:
#content {
display: flex;
width: 80%;
max-width: 1300px;
min-width: 900px;
margin: 80px auto;
}
#stream {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
width: 100%;
height: auto;
display: flex;
}
#video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#chatbox {
height: inherit;
}
我还试图按字符循环字符串,然后删除最常出现的字符串,但它不起作用:
string newString = "1 0 3 0 4 0 7 0";
sort(newString.begin(), newString.end());
newString.erase(unique(newString.begin(), newString.end()), newString.end());
任何帮助将不胜感激! :)
答案 0 :(得分:0)
试试此代码
void solve() {
string s = "1 0 3 0 4 0 7 0";
int mx_count = 0, cnt[10] = {0};
char mx_occ = '0';
for(int i = 0; i < int(s.size()); i++) {
if('0' <= s[i] && s[i] <= '9') {
cnt[s[i] - '0']++;
if(cnt[s[i] - '0'] > mx_count)
mx_count = cnt[s[i] - '0'], mx_occ = s[i];
}
}
queue<int> idxs;
for(int i = 0; i < int(s.size()); i++) {
if(!('0' <= s[i] && s[i] <= '9')) continue;
if(s[i] == mx_occ) idxs.push(i);
else {
if(!idxs.empty()) {
int j = idxs.front();
idxs.pop();
swap(s[i], s[j]);
idxs.push(i);
}
}
}
// instead of the below while loop
// you can loop on the queue and
// erase the chars at the positions in that queue.
int i = int(s.size()) - 1;
while(i >= 0 && (!('0' <= s[i] && s[i] <= '9') || s[i] == mx_occ)) {
--i;
}
if(i >= 0) s = s.substr(0, i + 1);
else s = "";
cout << s << "\n";
}
答案 1 :(得分:0)
声明字符串后:
string newString = "1 0 3 0 4 0 7 0";
您可以使用替换语句(如果您愿意,可以使用可以找到最常见事件的函数)
newString = newString.replace(" 0", " ");
如果您想使用函数来告诉您哪个字符最常见,那么您将能够将其放入替换函数的第一个参数中。
请告诉我这是否有帮助!