Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

string iterator - C++

03.03.2013, 18:40. Просмотров 2035. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 18:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос string iterator (C++):

Сравнение string::iterator со string::reverse_iterator - C++
Уважаемые форумчане, подскажите пожалуйста, как можно сравнить string::iterator и string::reverse_iterator, в частности что бы определить,...

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

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

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...

4
XRuZzz
Антикодер
706 / 612 / 31
Регистрация: 15.09.2012
Сообщений: 2,561
03.03.2013, 18:51 #2
мне кажется если вы уберёте комент, то можете просто проскачить while(it != s.end()) прибавив к it сразу две итерации
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
03.03.2013, 19:18  [ТС] #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;
}
0
XRuZzz
Антикодер
706 / 612 / 31
Регистрация: 15.09.2012
Сообщений: 2,561
03.03.2013, 21:32 #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
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
03.03.2013, 21:36  [ТС] #5
XRuZzz, Да, это то что я хотел!
0
03.03.2013, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 21:36
Привет! Вот еще темы с ответами:

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; ...

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; ...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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