Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Разбить строку на 2 части


Автор: XuMuKJS 17.1.2012, 09:41
Здравствуйте

У меня такая проблема :
Дано комплексное число, и нужно настроить его чтобы оно правильно выводилось
И нужно разбить его на 2 части, 
Строки  состоят из двух полей, разделенных символом i. т.е. Первое поле задает значение реальной части числа, а второе — мнимой. Каждое из нолей может содержать только символы десятичных цифр и символы - и +, задающие знак числа. Символы - или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, число принимает нулевое значение.

Заранее спасибо

Автор: borisbn 17.1.2012, 09:56
Код

#include <iostream>
#include <string>

void break_complex_string( const std::string & str, int & re, int & im ) {
   size_t i_pos = str.find( "i" );
   re = 0;
   im = 0;
   if ( i_pos != std::string::npos ) {
      std::string re_str = str.substr( 0, i_pos );
      std::string im_str = str.substr( i_pos + 1 );
      re = atoi( re_str.c_str() );
      im = atoi( im_str.c_str() );
   }
}

int main() {
   std::string str = "-13i42";
   int re, im;
   break_complex_string( str, re, im );
   std::cout << "str = " << str << ". re = " << re << "; im = " << im << std::endl;
}

http://liveworkspace.org/code/50540dc37ad9fa4eddf41784147652f8

Автор: XuMuKJS 17.1.2012, 10:03
Спасибо за код, но можно ли это реализовать без использования дерективы string ?

Автор: bsa 17.1.2012, 10:12
Цитата(XuMuKJS @  17.1.2012,  11:03 Найти цитируемый пост)
можно ли это реализовать без использования дерективы string ? 

string - это не директива. это класс-строка. он стандартный для С++.
Если тебе необходимо это сделать на С, то так и пиши.

Автор: bsa 17.1.2012, 10:12
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: XuMuKJS 17.1.2012, 10:17
Цитата(bsa @ 17.1.2012,  10:12)
Цитата(XuMuKJS @  17.1.2012,  11:03 Найти цитируемый пост)
можно ли это реализовать без использования дерективы string ? 

string - это не директива. это класс-строка. он стандартный для С++.
Если тебе необходимо это сделать на С, то так и пиши.

Видимо насчет строк я погорячился.
Вы можете показать , какой будет код, если работать не со строками, а с массивами?

Автор: borisbn 17.1.2012, 10:37
Цитата(XuMuKJS @  17.1.2012,  10:17 Найти цитируемый пост)
какой будет код, если работать не со строками, а с массивами?

http://liveworkspace.org/code/455176bed183f024d5b1c6f70a790791

Автор: XuMuKJS 17.1.2012, 14:18
Цитата(borisbn @ 17.1.2012,  10:37)
Цитата(XuMuKJS @  17.1.2012,  10:17 Найти цитируемый пост)
какой будет код, если работать не со строками, а с массивами?

http://liveworkspace.org/code/455176bed183f024d5b1c6f70a790791

Код хорош, но он не решает проблемы с повторением знаков "-" и "+". А они могут быть только на первых позициях. И удалить те записи, где эти знаки стоят в иных местах, у меня не получается

Автор: XuMuKJS 19.1.2012, 09:18
Цитата(XuMuKJS @ 17.1.2012,  14:18)
Цитата(borisbn @ 17.1.2012,  10:37)
Цитата(XuMuKJS @  17.1.2012,  10:17 Найти цитируемый пост)
какой будет код, если работать не со строками, а с массивами?

http://liveworkspace.org/code/455176bed183f024d5b1c6f70a790791

Код хорош, но он не решает проблемы с повторением знаков "-" и "+". А они могут быть только на первых позициях. И удалить те записи, где эти знаки стоят в иных местах, у меня не получается

Проблема решена, спасибо за код

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)