Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220

Распарсить строку, найти числа. произвести арифметические операции

06.10.2014, 11:51. Показов 5903. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто подскажет по поводу такого вопроса, сразу говорю есть строка ansistring, вида "12,12,33,56,23,67"
причем цифр в строке всегда разное кол-во, вопрос в следующе как мне пройти по всей строке и каждое число до запятой вычесть с числом заданным в spinedit.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2014, 11:51
Ответы с готовыми решениями:

Как корректно произвести арифметические операции
Здравствуйте. Нужно задать на масме формулу (a+1)/(a-1) + c*d. Деление я допустим сделал. Для целых значений больше 0 работает. mov...

Арифметические операции. Комплексные числа
Была поставлена задача: class Complex Смешанная арифметика ( перегрузка операторов) Как я понял я должен перевести выражение из...

Двоичные числа и арифметические операции с ними
добрый день. есть такая задача: описать класс для работы со строкой, позволяющей хранить только двоичное число и выполнять с ним...

13
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.10.2014, 11:53
Игорь1986, Распарсить по токену "," - получить массив строк, каждая из которых это число до запятой - пройтись по массиву, перевести каждую строку в число, вычесть - профит.
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
06.10.2014, 11:59
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
    {
    string a = "21,22,23,24";
    string buff;
    int aa = 55;
    for (int x = 0; x <=a.size(); x++)
    {
        if (a[x] == ',' || a[x]=='\0')
        {
            cout << aa + atoi(buff.c_str())<<endl;
            buff = "";
        }
        else
            buff += a[x];
    }
    system("Pause");
        return 0;
    }
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
06.10.2014, 12:00
Я бы воспользовался sscanf для считывания чисел.
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 12:06  [ТС]
cout << aa + atoi(buff.c_str())<<endl;
Что за строчка такая интересная
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
06.10.2014, 12:14
aa = слагаемое твое; я почему то подумал что тебе надо сложение, но нечего замени + на -
atoi() = преобразует из char * в int
buff.c_str = возвращает char* строку
endl = очищает буффер
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 12:35  [ТС]
Это то я понял я непойму зачем такая конструкция если у тебя конец строки или запятая
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
06.10.2014, 12:39
Чтобы прибавлялось число на каждой запятой, а потом последнее, когда достигнут конец строки.
Но лично я не слишком уверен, что такое чтение нуля из string корректно.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.10.2014, 12:43
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
 
int main()
{
   const std::string a = "21,22,23,24";
   std::vector<std::string> words;
   boost::split(words, a, boost::is_any_of(","), boost::token_compress_on);
   std::vector<int> numbers;
   std::transform(words.begin(), words.end(), std::back_inserter(numbers), &boost::lexical_cast<int, std::string>);
   std::copy(numbers.begin(), numbers.end(), std::ostream_iterator<int>(std::cout, "\n"));
}
http://coliru.stacked-crooked.... f7524fe675
1
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 12:44  [ТС]
Короче прикладываю вам код надо помочь в одной вещи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TStringList *LinkedAnalog = new TStringList();
LinkedAnalog->Clear();
LinkedAnalog->Delimiter = ',';
for (int i = 0; i < Result->RowCount-1; i++)
{
  if(Result->Cells[4][i+1]!="")
  {
    LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
    for(int k = 0; k < LinkedAnalog->Count; k++)
    {
     Result->Cells[4][i+1]=IntToStr(LinkedAnalog->Strings[k].ToInt()- OffsetAnalog->Value);
    }
  }
}
delete LinkedAnalog;
LinkedAnalog = NULL;
в строке
Result->Cells[4][i+1]=IntToStr(LinkedAnalog->Strings[k].ToInt()- OffsetAnalog->Value);
добавляется в мой Result лишь одно значение а надо несколько может тут поможете
Result это stringgrid
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
06.10.2014, 12:49
Цитата Сообщение от Qwertiy Посмотреть сообщение
Чтобы прибавлялось число на каждой запятой, а потом последнее, когда достигнут конец строки.
Но лично я не слишком уверен, что такое чтение нуля из string корректно.
C++
1
2
3
4
5
6
7
8
int main()
    {
    string a = "21,22,23,24";
    for (int x = 0; x <= a.size(); x++)
        cout <<std::hex<<(int) a[x]<<" ";
    system("Pause");
        return 0;
    }
Легко проверить
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
06.10.2014, 13:03
Цитата Сообщение от MousePro Посмотреть сообщение
Легко проверить
Ага, до тех пор, пока какой-нибудь умный компилятор не скажет: "Ага, а ну-ка я соптимизирую неопределённое поведение"
Так-то понятно, что там с-style-строка лежит с ноликом в конце, но вот разрешено ли его так читать - этого я не знаю...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.10.2014, 13:07
Qwertiy,
C++
1
2
reference       operator[]( size_type pos );
const_reference operator[]( size_type pos ) const;
Returns a reference to the character at specified location pos. No bounds checking is performed.
1) If pos == size(), the behavior is undefined.
2) If pos == size(), a reference to the character with value CharT() (the null character) is returned.
(until C++11)
If pos == size(), a reference to the character with value CharT() (the null character) is returned.
For the first (non-const) version, the behavior is undefined if this character is modified.
(since C++11)
Вкратце, до С++11, индекс по size можно брать только в случае работы с константной строкой. После С++11 индекс по size можно брать, но не изменять.
1
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 13:16  [ТС]
Короче обьясняю тогда еще раз, существует stringgrid, в столбце которого формируются строки, теперь задаю число, и потом для каждой строки(взять 1 строку чисел пройти и вычесть наше заданное число) и так далее по всем ячейкам столбца, теперь я думаю яснее))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2014, 13:16
Помогаю со студенческими работами здесь

Арифметические операции с десятичными цифрами числа
Дано 3-хзначное число.Определить: а)Является ли сумма его чисел 2-хзначным числом? б)Является ли произведение его цифр 3-хзначным...

Представление числа в стандартном виде и арифметические операции с ним
Необходимо представить число в стандартном виде , например : 1 * 10^-55. Я считаю , что для хранения такого числа , достаточно две...

Разместить числа в стеке и выполнить над ними арифметические операции
Часть 1. Положить в стек 7 целых чисел размером в слово. Используя, хотя бы 2 режима адресации выполните следующие действия: a. К 2-ому...

Арифметические операции, найти ошибку в коде
Где ошыбка? #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { double mult = 1; int n = 1; ...

Арифметические операции, найти ошибку в коде
Мой мозг сейчас взорвется, :wall: не могу понять где косяк. DIM MASX AS INTEGER, MASY AS INTEGER, I AS INTEGER MASX = 9 MASY = 9 I...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru