#c
#c
Вопрос:
Я пытаюсь использовать кодировку длины выполнения.
Проблема в том… a равно 2 раза, но cout show f равно 3. A не отображается в результате. И количество переменных последнего элемента остается равным последнему элементу.
#include <iostream>
using namespace std;
int main()
{
string str = "aafffkhjskk";
int arr[100];
int count = 1;
cout << str << endl;
// print text on screen
for (int r = 0; r < str.length(); r ) {
// Str 0 strating point
for (int in = r; in < str.length(); in ) {
// r = in because increment finding element
if (str[r] == str[in]) {
count ;
}
else {
r = (count - 1);
// r value is equal to count
cout << " r " << r << " count " << count << endl;
cout << count << " ****** "
<< str[r] << endl;
count = 1;
// making count 1 again.
break;
}
}
} // for end here
}
Комментарии:
1. Вы обнаружите, что читать и отлаживать ваш код намного проще, когда он следует стандартным правилам отступов. Для кодирования длины выполнения требуется только один цикл.
2. Я думаю, что начальное значение count должно быть 0, а не 1
Ответ №1:
Ваш выбор r
(для следующей начальной позиции) неверен. Я предлагаю использовать a r_next
для обозначения следующего символа, который является ближайшим символом, отличным от текущего поискового. Флаг a pick_next
указывает, r_next
установлен он или нет (0 не установлен, 1 установлен). Следующий поиск будет начинаться с r_next
:
#include <iostream>
using namespace std;
int main()
{
string str = "aafffkhjskk";
int pick_next, r_next, count;
cout << str << endl;
int r = 0, count = 0;
while ((r count) < str.size()) {
count = 0; // Str 0 strating point
pick_next = 0;
for (int in = r; in < str.length(); in ) {
// r = in because increment finding element
if (str[r] == str[in]) {
count ;
}
// mark the first non-identical position
else {
if (pick_next == 0) {
r_next = in;
pick_next = 1;
}
}
}
cout << "count = " << count << " ****** " << str[r] << endl;
r = r_next; // place r for next search
} // end of while
}
Test run:
$ ./a.exe
aafffkhjskk
count = 2 ****** a
count = 3 ****** f
count = 3 ****** k
count = 1 ****** h
count = 1 ****** j
count = 1 ****** s
count = 2 ****** k
--
Комментарии:
1. Спасибо … но это всего лишь строка печати
2. @Lalitb Извините, есть одна ошибка копирования-вставки. Я исправил это, попробуйте.
3. Извините за поздний ответ Спасибо