Программа находит в строке char
последовательности одинаковых символов длинной более 3 символов(кроме пробела) и закидывает эти фрагменты в двумерный массив.
char s[]={"fht nnnnn jejr ttt mcbkurq zzzz f"};
char c[10][10];
int z=0,l,o,k=0,m,n,q,len=strlen(s) ;
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
if ((s[j]==s[i]) && (s[i]!=' ')){
for(o=j,l=i; s[o]==s[l];++l,++o){
z++;
if (z>=3){ for(q=0,m=o;q<z;q++){
char C=s[m];
c[k][q]=C;}k++, z=0;} }
}else z=0;}
}
На выводе получается чепуха еще и с ошибками типа Run time
и других, правильно отображается только последовательность ttt
. Полагаю, что косяки с момента условия if (z>=3)
, но что исправить...
Этот код должен решать Вашу задачу:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::string s{"fht nnnnn jejr ttt mcbkurq zzzz fffff"};
std::vector<std::string> res;
const int SEQ_CNT = 3;
char c;
int cnt = 0;
auto process = [&] {
if (c != ' ' && cnt >= SEQ_CNT) {
res.emplace_back(cnt, c);
}
};
auto reset = [&](char new_char) {
c = new_char;
cnt = 1;
};
for (auto cur_c: s) {
if (cnt == 0) {
reset(cur_c);
} else if (c != cur_c) {
process();
reset(cur_c);
} else {
++cnt;
}
}
process();
for (auto & s: res) {
std::cout << s << std::endl;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я использую примерТут выводятся положения точки на экране :
В каком порядке пройдет инициализация членов класса в С++? Сначала будет вызван конструктор класса или сначала будут проиницилазованы члены-класса?
Мне нужно сконвертировать переменную типа long в char arrayКак это организовать?