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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.72
AnreyKazakov
Заблокирован
#1

string::npos задать корректное условие - C++

26.09.2012, 23:57. Просмотров 3876. Ответов 8
Метки нет (Все метки)

Задача - разбить введеную строку на слова и забить в лист... у меня она решена конечно, но некрасиво, а этот вариант чет не канает....
C++
1
2
3
4
5
6
7
string line;
list<string> all;
string::size_type k=0;
while(getline(cin,line)){
    do{all.push_back(line.substr(k,(line.find(" ",k)==string::npos?line.size()-k:line.find(" ",k)-k)));
            }while(string::npos!=(k=line.find(" ",k))++);
        }
Вот....
Кусок кода, он зацикливается до бесконечности, подозреваю ошибка в условии Но, понять где не могу.... =(

Добавлено через 1 минуту
При чем внутри цикла он нормально находит npos и выводит корректно а в условии нет =(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2012, 23:57     string::npos задать корректное условие
Посмотрите здесь:

string::npos - C++
string::npos == 4294967295 - максимально возможное количество символов в string почему npos так же == -1 std::cout &lt;&lt; string::npos...

задать условие if - C++
Ребят такая проблема, в проге нужно задать &quot;проверку на дурака&quot;, т.е если ты вводиш символ или отрицательное число или 0 или меньше 1 , то...

как задать условие? - C++
мне надо чтобы только при сложении на экран выводилось +, при вычитании -, при умножении *, при делении / помогите. #include &quot;komplex.h&quot;...

Задать нужное условие - C++
Всем привет.Требуется помощь. У меня есть программа перевода чисел из 10-й системы счисления в 2-ю,всё работает,но нужно задать...

Как задать условие - C++
Условие : НЕ(А ИЛИ В) И HE(A ИЛИ С) (!((int)a || (int)b) &amp;&amp;! ((int)a || (int)c)) Вот что у меня ... Буду благодарен за...

Правильно задать условие в цикле - C++
char name; int dov; while (dov &lt; 32){ printf(&quot;Name: \n&quot;); scanf(&quot;%s&quot;, &amp;name); dov=strlen(name); if (dov &gt; 31)...

Как задать обратное условие в if - C++
как задать в такой строке обратное условие? if ( p = strstr(buf, &quot;//&quot;) )

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
27.09.2012, 00:12     string::npos задать корректное условие #2
Написал тут свой велоиспед, можно красивше, но тогда будет менее понятно.
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>
#include <list>
using namespace std;
 
int main()
{
    string str="String ,   !! with ?? text.";
    list<string> words;
    string toFind=" ,.;!?[]1234567890";
    size_t startPos=str.find_first_not_of(toFind);
    size_t endPos=str.find_first_of(toFind,startPos+1);
    if(startPos!=string::npos && endPos==string::npos)//видимо только одно слово
        words.push_back(str);
    while(startPos!=string::npos && endPos!=string::npos)
    {
        words.push_back(str.substr(startPos,endPos-startPos));
        startPos=str.find_first_not_of(toFind,endPos+1);
        endPos=str.find_first_of(toFind,startPos+1);
    }
    list<string>::iterator it=words.begin();
    while(it!=words.end())
        cout<<*it++<<endl;
}
AnreyKazakov
Заблокирован
27.09.2012, 11:20  [ТС]     string::npos задать корректное условие #3
Этот велосипед не в ту сторону едет

Добавлено через 9 часов 13 минут
Ну помогите кто-нибудь, пожалуйста, почему условие не пашет? Вот, код полностью, если посмотрите в условии wile почему-то неравенство пропускает, а потом тут же в начале след итерации пишет что верно (сравнив k и конец find'а - string::npos , я уже проверок кучу строк затолкал , результата 0, бьюсь уже неск часов =(
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
#include <iostream>
#include <string>
#include <iterator>
#include <list>
#include <utility>
#include <map>
using std::cout; using std::cin; using std::endl;using std::string;using std::getline;
using std::list; using std::iterator; using std::pair; using std::map;
int main(){
    string line;
    list<string> all;
    string::size_type k=-1;
    string x;
    while(getline(cin,line)){
        do{
        cout<<"позиция    k: "<<k<<" "<<endl;
        cout<<"символ конца: "<<string::npos<<" ";          
        if(k==string::npos)cout<<" +++++ k и символ конца равны";cout<<endl;
        ++k;
        all.push_back(line.substr(k,(line.find(" ",k)==string::npos?line.size()-k:line.find(" ",k)-k)));
        cout<<"позиция k+1: "<<k<<" "<<endl;
        cout<<"количество символов в слове(/0 /n): "<<(line.find(" ",k)==string::npos?line.size()-k:(line.find(" ",k)-k));
        cout<<endl<<"приращение k=line.find(\" \",k))"<<endl;
        cin>>x;
        }while((k=line.find(" ",k))!=string::npos);
        }
    cout<<endl; 
    for(list<string>::iterator ix=all.begin();ix!=all.end();++ix)cout<<*ix<<endl;
    return 0;
    }
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
27.09.2012, 11:25     string::npos задать корректное условие #4
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Этот велосипед не в ту сторону едет
Почему же? Вас просили слова повыделять и затолкать в лист, это и делает мой код
В вашем коде просто желания нет разбираться так как там чёрт ногу сломит.
C++
1
 all.push_back(line.substr(k,(line.find(" ",k)==string::npos?line.size()-k:line.find(" ",k)-k)));
Не, я понимаю что это прочитать вполне реально, но ох как не хочеться разбираться зачем это было сделано и что будет дальше

Не по теме:

ну и судя по количеству сообщений не хочеться разбираться не только мне ...

Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
27.09.2012, 11:47     string::npos задать корректное условие #5
У меня данный код работает на ура:

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
#include <list>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
 
using namespace std;
 
int main(int argc, char** argv) {
    string line;
    list<string> all;
    string::size_type k = 0;
    string::size_type nextWS = 0;
    while(getline(cin, line)){
        do{
            nextWS = line.find(" ", k);
            string subs = line.substr(k, 
                (nextWS == string::npos ? line.size() - k : nextWS - k));
            if (!subs.empty())
                all.push_back(subs);
            k = nextWS;
        }while(string::npos != k++);
    }
    
    cout<<"Words:\n";
    copy(all.begin(), all.end(), ostream_iterator<string>(cout, "\n"));
    return 0;
}
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
27.09.2012, 12:22     string::npos задать корректное условие #6
AnreyKazakov, Почему stringstream не используешь?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <list>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <iostream>
 
int main()
{
    const std::string s = "hello and what do you want now";
    std::stringstream ss(s);
    std::list<std::string> words((std::istream_iterator<std::string>(ss)), std::istream_iterator<std::string>());
    std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
AnreyKazakov
Заблокирован
27.09.2012, 14:43  [ТС]     string::npos задать корректное условие #7
Да еперный театр, я просто понять не могу почему не пашет, что блин задача сложная чтоли, я и сам могу написать 100500 решений разных, а тут не прет и все .... что-то именно в условии, можно код из центра ваабшэ убрать в первом варианте, пустой оставить, а условие выхода почему-то не пашет. Как я только над ним не извращался, не хочет и все =(
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
27.09.2012, 14:51     string::npos задать корректное условие #8
AnreyKazakov, Зачем удалять гланды через задницу?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <list>
#include <iostream>
 
int main()
{
   using namespace std;
string line;
list<string> all;
string::size_type k=0;
while(getline(cin,line)){
    do{all.push_back(line.substr(k,(line.find(" ",k)==string::npos?line.size()-k:line.find(" ",k)-k)));
      }while(string::npos!=(k=line.find(" ",k))++);
    cout << "processed" << std::endl;
}
}
У меня все работает. Входные данные пожалуйста скажите. Пишет ли processed? Для того, чтобы закончить первый цикл нужно послать EOF.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2012, 15:07     string::npos задать корректное условие
Еще ссылки по теме:

Как задать правильно условие??? - C++
Во введенных массивах найти последовательность максимальной длины из элементов, расположенных в порядке возрастания. Как правильно...

Как задать дополнительное условие? - C++
Задание само: Дан файл, содержащий текст. Переписать в другой файл только слова, начинающиеся с согласной, а заканчивающиеся гласной ...

Как правильно задать условие? - C++
Интересует 14 строчка. Нужно задать условие, что при вводе Y &amp;&amp; y исполнялось всё остальное. Как правильно это сделать\оформить? ...

Как задать условие для функции - C++
Добрый вечер! Например есть double Psi(double x) Нужно чтобы функция возвращала x при 0\leq x \leq 1\ , 2-x при 1\leq x \leq 2\ и 0 в...

Как задать условие неравенства чисел - C++
k = rand()%9; b = rand()%9; c = rand()%9; MaskEdit-&gt;Visible = true; MaskEdit-&gt;Visible = true; ...


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

Или воспользуйтесь поиском по форуму:
AnreyKazakov
Заблокирован
27.09.2012, 15:07  [ТС]     string::npos задать корректное условие #9
Аху... тфу, афигеть, кароче скопировал код в другой main и все поперло, КАК ТАК?
Второй раз уже такое вижу, один раз экзамен сдавал, задачи повышенной трудн на паскале, там капец четырехэтажное какое-то вычисление, ну я ВСЕ проверил раз 10 не прет, ушла куча времени, потом переписал заново, все точно так же, не поверите ни одного отличия в задачах, одна прет а у второй ошибка какая-то вылетает, я в той которая не шла все буквы 100% на латинские поменял и все равно не шла, мистика да и только... Я доволен , все пошло Всем спасибо за ответы =)

Добавлено через 11 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
Почему stringstream не используешь
Я еще пока не знаю что это , с месяц где-то на С++ =)
Yandex
Объявления
27.09.2012, 15:07     string::npos задать корректное условие
Ответ Создать тему
Опции темы

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