Answer the question
In order to leave comments, you need to log in
What needs to be changed in the C++ code?
The program finds sequences of identical characters longer than 3 in a string and pushes these fragments into a two-dimensional array.
char s[]={"qhtnnnnnnfchjjjgeeeeejg tdggv ddddddddd"};
int z=0,l,o,k=0,q,len=strlen(s) ;
char c[20][20];
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++)
{
if (s[i]==s[j])
{
for (o=i,l=j;;l++)
{
if(s[o]==s[l])
{
z++;
}
else
{
z=0;
break;
}
if (z>3)
{
for(q=0;q<z;q++) {c[k][q]=s[l];}
c[k][q]='\0';
k++;i=l+q;
}
}
}
}
}
Answer the question
In order to leave comments, you need to log in
The answer to the question.
Your code is overcomplicated, but if you understand it, then the problem is with the loop in which the checks with z go.
for (o = i,l = j; ;l++)
{
if (s[o] == s[l])
{
z++;
}
else
{
z=0;
break;
}
// Итак, что произойдёт в if'е ниже. Каждый раз, когда z > 3, будет добавляться строка в массив
// Даже если текущая последовательность ещё не кончилась.
if (z > 3)
{
for (q = 0; q < z; q++)
{
c[k][q] = s[l];
}
c[k][q] = '\0';
k++;
i = l + q;
}
}
int start_pos = 0;
int cur_pos = 1;
while (cur_pos < len)
{
// Начинаем сравнивать
while (cur_pos < len && s[start_pos] == s[cur_pos])
{
// Просто двигаемся к следующему элементу, пока они одинаковые
++cur_pos;
}
if (cur_pos - start_pos > 3) // Нашлось 4 или более одинаковых символа подряд
{
// Копируем, мне слишком лень писать этот кусок :) Но тут надо корректно обработать
// ситуацию с концом строки
// А ещё не забываем подвинуть start_pos и cur_pos
start_pos = cur_pos;
++cur_pos;
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question