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

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

Войти
Регистрация
Восстановить пароль
 
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
#1

Преобразование строки - C++

22.03.2013, 13:42. Просмотров 388. Ответов 6
Метки нет (Все метки)

У меня имеется массив string одномерный в каждом элементе этого массива записана строка. Строка начинается с пробела. ex строки: 378 1 384 1 402 1 426 1 474 1 495 1 489 1 522 1 570 1 573. Всё записано через пробел. Мне надо достать эти числа и записать в двумерный массив целых чисел. Двумерный так как строк у меня несколько.
Хотел сделать через формулу:
Заводим переменную целочисленного типа, которая равна первый символ * 10^(n-1) + второй символ * 10^(n-2). Что получится: 1*10 + 2 * 1 = 10 + 2 = 12.
Рассмотрим следующий случай: 3*10^(n-1) + 2*10^(n-2) + 1*10^(n-3) = 3*100 + 2*10 + 1 = 321.
Не вышло.
Как можно сделать такое преобразование наверняка?? Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 13:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование строки (C++):

Преобразование строки - C++
Здраствуйте, У меня возник вопрос о том как решить мою представленную задачу. Даны несколько строк и их надо преаброзовать по...

Преобразование строки - C++
Преобразовать строку таким образом, чтобы в ее начале были записаны слова, содержащие только цифры, потом слова, содержащие только буквы, а...

Преобразование чисел из строки - C++
Вот код #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> int main(){ char *p; char c="10...

Преобразование строки в формулу на с++ - C++
Помогите пожалуйста с решением лабораторной, суть в том что на вход функции с++ подается массив символов и значение переменной x, массив...

Преобразование строки в число - C++
задача : реализовать деление двух целых чисел, передаваемых функции в виде строк Всем добрый вечер. Прошу ваших советов и подсказок....

Преобразование строки в число - C++
А как многоразрядные числа из строки преобразовать? Если я использую string?

6
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.03.2013, 15:38 #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
25
26
27
28
29
30
31
std::vector<int> stringToVector(const std::string &string) {
  std::vector<int> result;
  result.clear();
  
  int variable = 0;
  for (std::string::const_iterator i = string.begin();
    i != string.end(); ++i) {
    if (*i == ' ') {
      if (variable !=0 || !result.empty()) {
        result.push_back(variable);
        variable = 0;
      }
    } else {
      variable = variable * 10 + *i - '0';
    }
  }
  result.push_back(variable);
  
  return result;
};
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  std::vector<int> numbers = stringToVector(" 378 1 384 1 402 1 426 1 474 1 495 1 489 1 522 1 570 1 573");
  for (size_t i = 0; i < numbers.size(); ++i) {
    std::cout << numbers[i] << " " << std::endl;
  }
 
  return 0;
}
Если можете еще, поменяйте формат входящей строки, чтобы пробел шел ЗА числом.
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.03.2013, 15:55 #3
А так не проще сделать:
C++
1
2
3
4
std::string str = " 378 1 384 1 402 1 426 1 474 1 495 1 489 1 522 1 570 1 573";
std::istringstream iss(str);
std::vector<int> numbers {std::istream_iterator<int>(iss), std::istream_iterator<int>()};
for (int x : numbers) std::cout << x << " ";
1
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
22.03.2013, 16:40  [ТС] #4
Цитата Сообщение от yuron_477 Посмотреть сообщение
А так не проще сделать:
C++
1
2
3
4
std::string str = " 378 1 384 1 402 1 426 1 474 1 495 1 489 1 522 1 570 1 573";
std::istringstream iss(str);
std::vector<int> numbers {std::istream_iterator<int>(iss), std::istream_iterator<int>()};
for (int x : numbers) std::cout << x << " ";
Пример полностью не работоспособен

Добавлено через 2 минуты
а можете сказать, это вы функцию написали?? а то просто я не вижу ключевых слов
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.03.2013, 16:55 #5
Цитата Сообщение от танкист34 Посмотреть сообщение
Пример полностью не работоспособен
танкист34, вы уверены? А так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
 
int main()
{
    std::string str = " 378 1 384 1 402 1 426 1 474 1 495 1 489 1 522 1 570 1 573";
    std::istringstream iss(str);
    std::vector<int> numbers((std::istream_iterator<int>(iss)), std::istream_iterator<int>());
    for (int i = 0; i<numbers.size(); ++i)
        std::cout << numbers[i] << " ";
 
    return 0;
}
1
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
22.03.2013, 17:00  [ТС] #6
Так работает, спасибо большое. А можете пояснить что это "istringstream" и "istream_iterator" и относятся ли они к заголовочному фалу #include <sstream>?
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.03.2013, 17:19 #7
танкист34, забиваете в поиск и ищите, смотрите примеры, заодно в книгу загляните.
Описание istringstream
0
22.03.2013, 17:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 17:19
Привет! Вот еще темы с ответами:

Преобразование строки в double - C++
Собственно есть код: #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; double atof(const char *nPtr) ...

Преобразование строки в дробь - C++
Выводит только первые 2 цифры после точки. Как сделать, чтобы дробь выводилась полностью? typedef wchar_t Char; typedef char...

Строки (преобразование текста) - C++
Ввести массив строк текста с неизвестным заранее количеством строк и строку символов разделителей. Признаком ввода последней строки...

Преобразование строки в целое - C++
Может вопрос и глупый, но я все равно не догоняю... В функции что означает 3 параметр: char *_itoa( int value, char *str, ...


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

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

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