Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
#1

string iterator - C++

03.03.2013, 18:40. Просмотров 1534. Ответов 4
Метки нет (Все метки)

Почему выдает ошибку при перемещение итератора на другую позицию?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
    string s = "1234A77FF3";
    string tmp = "";
    string::iterator it = s.begin();
    while(it != s.end())
    {
        if(*it>48 && *it<57)
            while((*it>48 && *it<57) || it != s.end()){
                tmp += *it;
                //it++; здесь ошибка, почему?
            }
            tmp+=" ";
        ++it;
    }
    cout<<tmp;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 18:40     string iterator
Посмотрите здесь:

std::sort(iterator, iterator, method) подскажите как исправить - C++
Уважаемые Знатоки!!! Вашему вниманию предоставляю код: #include &quot;stdafx.h&quot; #include &lt;vector&gt; #include &lt;algorithm&gt; class...

Iterator - C++
Почему следующая конструкция не работает: vector&lt;int&gt; v(10); vector&lt;int&gt;::iterator v_ptr; v_ptr = v.begin(); // v_ptr = 0 ...

Iterator - C++
vector &lt;char&gt;::iterator stek; *stek = '0'; После второй строчки программа при выполнении вылетает, почему?

iterator to count - C++
Возможно ли как-то получить порядковый номер вместо итератора не используя локальны счетчик. Для примера: std::string...

Iterator not deferencable - C++
#include&lt;iostream&gt; #include&lt;locale.h&gt; #include&lt;list&gt; #include&lt;fstream&gt; #include&lt;string&gt; #include&lt;conio.h&gt; using namespace std; ...

Map iterator - C++
map&lt;string, int&gt; m; m.insert(pair&lt;string, int&gt;(&quot;a&quot;, 1)); map&lt;string, int&gt;::iterator it = m.begin(); cout &lt;&lt; *it; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
03.03.2013, 18:51     string iterator #2
мне кажется если вы уберёте комент, то можете просто проскачить while(it != s.end()) прибавив к it сразу две итерации
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
03.03.2013, 19:18  [ТС]     string iterator #3
Вы были правы. Так программа работает, но когда последний символ стоит цифра то программа падает. Как это исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
    string s = "1234A77FF3j";
    string tmp = "";
    string::iterator it = s.begin();
    bool for_it = true;
    do
    {
        if(*it>48 && *it<57)
            while((*it>48 && *it<57)){
                tmp += *it;
                it++;
            }
            tmp+=" ";
        ++it;
    }while(it != s.end());
    cout<<tmp;
    system("pause");
    return 0;
}
Добавлено через 14 минут
С этим разобрался, но возникла другая проблема: почему строка tmp_for_symbol всегда пуста?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
    string s = "1234A77B3";
    string tmp_for_digit = "";
    string tmp_for_symbol = "";
    string::iterator it = s.begin();
    bool for_it = true;
    do
    {
        if(*it>48 && *it<57)
            while((*it>48 && *it<57)){
                tmp_for_digit += *it;
                it++;
                if(it == s.end()){
                    for_it = false;
                    break;
                }
            }
        else{
            while(*it == 'A' || *it == 'B'){
                tmp_for_symbol += *it;
                it++;
                if(it == s.end()){
                    for_it = false;
                    break;
                }
            }
        }
        tmp_for_symbol += " ";
        tmp_for_digit+=" ";
        if(for_it == true)
            ++it;
    }while(it != s.end());
    cout<<tmp_for_digit<<endl<<tmp_for_symbol;
    system("pause");
    return 0;
}
XRuZzz
Антикодер
659 / 560 / 27
Регистрация: 15.09.2012
Сообщений: 2,511
03.03.2013, 21:32     string iterator #4
что вы хотите сделать, какой результат должна получать программа? у вас сохранилась эта опасная концепция, когда вы в цикле изменяете итератор в разных местах во вложенных циклах.

Добавлено через 20 минут
по хорошему цифры или буквы в строке нужно искать регулярными выражениями
может вы хотите сделать это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    int digit = true;
    string s = "1234A77B3";
    string tmp_for_digit = "";
    string tmp_for_symbol = "";
    string::iterator it = s.begin();
    while(it != s.end())
    {
        if(*it>48 && *it<57)
        {
            if (!digit) tmp_for_digit +=" ";
            tmp_for_digit += *it;
            digit = true;
        }
        if(*it == 'A' || *it == 'B')
        {
            if (digit) tmp_for_symbol += " ";
            tmp_for_symbol += *it;
            digit = false;
        }
        ++it;
    }
    cout<<tmp_for_digit<<endl<<tmp_for_symbol;
    return 0;
}
вывод
1234 77 3
A B
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 21:36     string iterator
Еще ссылки по теме:

vector<pointer>::iterator - C++
В общем, есть некий родительский объект, в котором хранится динамический массив указателей на дочерние объекты. Требуется пройтись по всем...

list iterator template - C++
пишу в хэдере #include &lt;list&gt; using namespace std; template &lt;class T&gt; struct Transition { list&lt;T&gt;::iterator it; }; ...

vector iterator not decrementable - C++
Здраствуйте! Хочу вывести вектор задом-наперед, все нормально, но после того как оно выводит вектор сразу выскакивает ошибка vector...

deque iterator not dereferencable - C++
итак программа должна считывать из файла данные об автобусных маршрутах (имя водителя, номер маршрута и т.д.). После этого сортировать...

Segmentation fault (iterator) - C++
И снова здравствуйте! Кратко: функция некоторым образом парсит строку (не в этом проблема) и удаляет из нее НЕ алфавитно-цифровые...

STL List Iterator - C++
Как в STL list из итератора получить номер элемента, на который он указывает? Вот пример с вектором: cliext::vector&lt;int&gt;::iterator it; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
03.03.2013, 21:36  [ТС]     string iterator #5
XRuZzz, Да, это то что я хотел!
Yandex
Объявления
03.03.2013, 21:36     string iterator
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru