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

Работа со string - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.02.2012, 13:33     Работа со string #1
Посоветуйте как сделать? Есть переменная типа string .Ей присваивается значение дробного числа , например 17.5 . Нужно написать 2 функции :
  • 1я анализирует целую часть числа (то есть до точки) и записывает ее в переменную n .
  • 2я вторая функция анализирует дробную часть числа (после точки) и присваивает ее значение переменной i.
функции должны работать не зависимо друг от друга
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2012, 13:33     Работа со string
Посмотрите здесь:

работа со string C++
C++ Работа со строками string
работа со строками [String.h] C++
работа со string C++
C++ Работа с string в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.02.2012, 14:34     Работа со string #2
Цитата Сообщение от ahamoth Посмотреть сообщение
Посоветуйте как сделать?
stringstream + string::find (или что-то в этом духе).
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.02.2012, 15:04  [ТС]     Работа со string #3
написал первую функцию, прога вылетает. что не правильно делаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;
 
int main(int argc, char *argv[])
{setlocale(LC_CTYPE,"Russian"); 
    string chislo , celaya_chast;
    int i,j;
   cout<<"введите число"<<endl;
   cin>>chislo;
   getline (cin, chislo);
   do 
   { celaya_chast[i]=chislo[i];}
   while (chislo[i]!='+');
cout<<celaya_chast;
  
    system("PAUSE");
    return EXIT_SUCCESS;
}
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
15.02.2012, 15:05     Работа со string #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using std::cin;
using std::string;
using std::cout;
 
int main()
{
    string s = "6666.3333";
    size_t sz=s.find_first_of('.');
    char buf1 [10];
    char buf2 [10];
    strncpy(buf1,&s[0],sz);
    strncpy(buf2,&s[sz+1],s.size()-sz);
    buf1[sz] =0;
    cout<<buf1<<"   "<<buf2;
        system("PAUSE");
    return 0;
}
работа с функциями строки. скидывает целую и дробную в 2 разных переменных.
но я вижу что ты и сам уже все написал
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.02.2012, 15:10  [ТС]     Работа со string #5
AzaKendler, так мой то код не работает , что я не правильно делаю?
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
15.02.2012, 15:17     Работа со string #6
Цитата Сообщение от ahamoth Посмотреть сообщение
while (chislo[i]!='+');
это символ + является разделителем целой и дробной части. я так понял?
наверно я не уловил задачи
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.02.2012, 15:17  [ТС]     Работа со string #7
AzaKendler, да
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
15.02.2012, 15:23     Работа со string #8
Цитата Сообщение от ahamoth Посмотреть сообщение
getline (cin, chislo);
эта строка что делает?
разве не cin.getline должно быть
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.02.2012, 15:30  [ТС]     Работа со string #9
я как тут сделал http://www.mochima.com/tutorials/strings.html
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string param_name, param_value, url_encoded;
 
do
{
    getline (cin, param_name);
    if (param_name != "")
    {
        getline (cin, param_value);
        //  ... 
    }
}
while (param_name != "");
 
cout << "URL-encoded: " << url_encoded << endl;
KATbIK
 Аватар для KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
15.02.2012, 19:37     Работа со string #10
Вообще учись на примере AzaKendler.
А это, вот, чуток поправил. Не проверял, прям в быстром ответе поправил. Не будет точки, капут проге))

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
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
 
int main(int argc, char *argv[])
{setlocale(LC_CTYPE,"Russian"); 
    string chislo , celaya_chast;
    int i = 0,j;
   cout<<"введите число"<<endl;
   cin>>chislo;
   while(chislo.at(i) != '.')
   {
      celaya_chast += chislo.at(i);
      ++i; 
   }
   //getline (cin, chislo);
   //do 
   //{ celaya_chast[i]=chislo[i];}
   //while (chislo[i]!='+');
cout<<celaya_chast << endl;
  
    system("PAUSE");
    return EXIT_SUCCESS;
}
алгоритмы stl
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.02.2012, 21:37  [ТС]     Работа со string #11
А как реализовать следующий алгоритм . дана переменная типа string . в нее будет заноситься дробная часть десятичного числа.Требуется реализовать алгоритм перевода дробной части десятичного числа в 2ю сс.
вот принцип :Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.11*2 = 0.22 (целая часть 0)
0.22*2 = 0.44 (целая часть 0)
0.44*2 = 0.88 (целая часть 0)
0.88*2 = 1.76 (целая часть 1)
0.76*2 = 1.52 (целая часть 1)
0.52*2 = 1.04 (целая часть 1)
Получаем число в 2-ой системе счисления: 000111
0.11 = 0001112
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
15.02.2012, 23:18     Работа со string #12
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
32
33
34
35
36
37
38
#include <iostream>
#include <string>
using std::string;
using std::cout;
 
string convert (const string & s) //пересчет по твоей схеме с точностью 6 знаков
{
 
    char buf [20];  
    string rez = "000000";
    strncpy(buf,s.c_str(),s.size());
    int val = atoi(&buf[2]);
    double divider = (s.size()-2);
    divider = pow(10.0,divider);
    float num = val/divider;
    int precizion = 6;
    int count = 0;
    while(precizion--)
    {
        
        if((num*=2)<1)
            rez[count++] = '0';
        else
            rez[count++] = '1';
    }
 
    return rez;
};
 
 
int main()
 
{
    string s = "0.23456"; 
    cout<<convert(s); //возвращает дробную часть по твоей схеме 
 
return 0;
}
ahamoth
 Аватар для ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
16.02.2012, 00:12  [ТС]     Работа со string #13
на pow ругается
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2012, 00:25     Работа со string #14
Цитата Сообщение от ahamoth Посмотреть сообщение
на pow ругается
C++
1
#include <cmath>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 14:23     Работа со string
Еще ссылки по теме:

C++ Работа с классом string в C++
C++ работа с классом string
Работа со string C++

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

Или воспользуйтесь поиском по форуму:
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 14:23     Работа со string #15
ahamoth,

C++
1
2
3
4
5
6
7
8
9
10
11
while(precizion--)
    {
        
        if((num*=2)<1)
            rez[count++] = '0';
        else
        {                    // скобки обязательно 
            num-=1; // отбрасываем целое
            rez[count++] = '1';
        }
    }
исправленный цикл. ты прав. упустил кое- что в твоей системе. то что когда становится более 1 то надо опять отбросить целое. и скобки обязательны. попробуй так.
Yandex
Объявления
16.02.2012, 14:23     Работа со string
Ответ Создать тему
Опции темы

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