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

Цикл до символа - C++

Восстановить пароль Регистрация
 
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 06:28     Цикл до символа #1
Здравствуйте, разбираюсь в С++
Хочу сделать консольный калькулятор(простой который будет выполнять операции над двумя числами.)
Кусок:
C++
1
2
3
4
5
6
7
std::string input=""; 
std::string tmp="";
getline(std::cin,input); // принимаем ввод до нажатия Enter
    
for(int i=0; input[i] != '-' || input[i] != '+' || input[i] != '/' || input[i] != '*'; i++){ //цикл до знака чтобы отделить первое слагаемое
tmp+=input[i];  // 
    }
Результат Segmentatino fault
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 06:28     Цикл до символа
Посмотрите здесь:

2 символа s2 последние и средние 3 символа s1 - соединить C++
C++ Считать из файла от определенного символа(слова) до определенного символа(слова)
C++ Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
C++ Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
C++ Копирование из строки от символа до символа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.07.2012, 06:50     Цикл до символа #2
можно так

C++
1
2
3
4
5
6
7
for(size_t i=0; i<input.length(); i++)
    { //цикл до знака чтобы отделить первое слагаемое
       if(input[i] == '-' || input[i] == '+' || input[i] == '/' || input[i] == '*')
            continue;
       else
                tmp.push_back(input[i]);  //
    }
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 07:01  [ТС]     Цикл до символа #3
А в чем у меня ошибка?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.07.2012, 07:12     Цикл до символа #4
alekola, Ну в том, что может не встретится ни одного такого знака и тогда будем пытаться брать данные из некой области памяти, которая находится за пределом нашей строки. Ну и плюс бесконечный цикл.

Достаточно переписать так.

C++
1
for(int i=0; i < input.length() && input[i] != '-' && input[i] != '+' && input[i] != '/' && input[i] != '*'; i++)
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.07.2012, 07:14     Цикл до символа #5
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 07:43  [ТС]     Цикл до символа #6
C++
1
2
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
Покажите пожалуйста как синтаксически правильно нужно это составить
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
18.07.2012, 09:04     Цикл до символа #7
Цитата Сообщение от defer Посмотреть сообщение
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
С чего бы это.
Логический оператор можно написать любой сложности.
А еще можно, например, использовать оператор "запятая":
C++
1
2
3
4
5
6
7
for(int i=0,bool b; 
    b=i < input.length(), 
    b&&=input[i] != '-',
    b&&=input[i] != '+', 
    b&&=input[i] != '/',
    b&&=input[i] != '*';
 i++)
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 09:27  [ТС]     Цикл до символа #8
Ну в том, что может не встретится ни одного такого знака и тогда будем пытаться брать данные из некой области памяти, которая находится за пределом нашей строки. Ну и плюс бесконечный цикл.
Если я подаю корректную строку ошибка все равно появляется(первый код)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.07.2012, 09:57     Цикл до символа #9
alekola, Там дальше. Читайте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2012, 10:19     Цикл до символа
Еще ссылки по теме:

C++ Вместо 1-го символа, нужно чтобы 2 символа считывалось!
Создать строку: с начало три символа первой строки, потом эти же три символа в обратном порядке C++
Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11 C++

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
18.07.2012, 10:19     Цикл до символа #10
А с кодировкой у Вас все в порядке?
getline прочитает в кодировке CP866,
а сравниваете Вы в Windows 1251.
Yandex
Объявления
18.07.2012, 10:19     Цикл до символа
Ответ Создать тему
Опции темы

Текущее время: 19:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru