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

Поиск строк - C++

Восстановить пароль Регистрация
 
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 22:49     Поиск строк #1
Мне нужно найти в строке символ "," и заменить ее. Данная программа демонстрирует нахождение одной запятой

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
#include<iostream>
#include<string>
using namespace std;
class a
    {private:
    string b;
    long double c;
    int y;
    public:
        void fc()
        {
        cout<<"Введите кол-во средств (разряды пишите через запятую) -->";
        cin>>b;
        for(int z=0;z<40;z++)
        y=b.find(",");
        cout<<y<<endl;
}
    };
int main ()
{setlocale(LC_ALL,"Rus");
a a1;
a1.fc();
cin.get();
cin.get();
return 0;
}
Эта программа тоже делает тоже самое

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
#include<iostream>
#include<string>
using namespace std;
class a
    {private:
    string b;
    long double c;
    int y[40];
    public:
        void fc()
        {
        cout<<"Введите кол-во средств (разряды пишите через запятую) -->";
        cin>>b;
        for(int z=0;z<40;z++)
        {y[z]=b.find(",");}
        for(int x=0;x<40;x++)
            cout<<y[x]<<endl;
}
    };
int main ()
{setlocale(LC_ALL,"Rus");
a a1;
a1.fc();
cin.get();
cin.get();
return 0;
}
Как мне заставить эту программу (вторую) записывать в элементы массива позиции найденых запятых ?

Добавлено через 41 минуту
вообщем я хочу написать работующую программу которая бы убирала из строки символы запятые и конвертировала бы эту строку в long double.

Я подумал что с массивами у меня получится. Но не тут то было

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
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <cstring>
using namespace std;
 
    class a
    {private:
    char b[40],f[40];
    long double c;
    int y[40];
    public:
        void fc()
        {cout<<"Введите кол-во средств (разряды пишите через запятую) -->";
        cin.get(b,40);
        for(int z=0;z<40;z++)
        {if (b[z]!=',')
        {f[z]=b[z];}
        }
        cout<<f<<endl;
        c=_atold(b);
        cout<<c<<endl;}
    };
    int main ()
{setlocale(LC_ALL,"Rus");
    a a1;
    a1.fc();
    cin.get();
    cin.get();
return 0;
}
Программа не принимает функцию

C++
1
_atold
почему ?

Ладно, смерился, нашел другую функцию

C++
1
c=atof(b);
Вставив в программу снова узрел, что она не работает.
По-моему эта функция не то что мне нужно.

Нашел вот эту статью
http://www.cplusplus.com/forum/beginner/12277/
Но нечего не поняв в предпоследнем ответе решил обратиться. Мне нужно написать эту программу с помощью массивов и строк. Помогите плиз.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.07.2011, 23:01     Поиск строк #2
Цитата Сообщение от parkito Посмотреть сообщение
Мне нужно найти в строке символ "," и заменить ее. Данная программа демонстрирует нахождение одной запятой
Просто заменить - это легко делается методов куча, дальше ничего не понял.

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
#include <string>
#include <iostream>
using namespace std;
 
 
int main(int argc, char* argv[])
{
    string str = "molekula, atom, element-particle, kvarky";
    char ch    = ',';
    char repl  = '-';
 
    for(string::iterator iter = str.begin(); iter != str.end(); ++iter) {
         if( *iter == ch )
              *iter = repl;
    }
 
  /*  можно таким способом
   for(size_t i = 0u; i < str.length(); i++) {
        if(str.at(i) == ch)
           str[i] = repl;
    }
 
 */
    cout << str.c_str() << endl;
 
 
    cin.get();
    return 0;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.07.2011, 23:07     Поиск строк #3
Цитата Сообщение от parkito Посмотреть сообщение
вообщем я хочу написать работующую программу которая бы убирала из строки символы запятые и конвертировала бы эту строку в long double.
Приведите пример пожалуйста.
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 23:08  [ТС]     Поиск строк #4
Вот пример. Только не работующий

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <cstring>
 
using namespace std;
//////////////////////////////////
 long double mstold(char para[])
{
    long double money;
     int n=0;
     char karakter[100];
     int len = strlen(para);
     for(int i=0; i<len+1; i++)    
     {
             if(para[i] >= '0' && para[i] <= '9')
             {
                        karakter[n] = para[i];
                        n++;
             }
     }
     
                        
     money = _atold(karakter);
     
     return money;
}
     
     
int main(int argc, char *argv[])
{
    char choice;
    char string[100];
    long double para = 0;
 ////////////////////////////////////////
    do
    {
      cout << "Enter money: "; 
      cin >> string;
           
      para = mstold(string);
    
      cout << "Your cash is: " << para << endl;
      
      cout << "Do another ?(y/n)" ;
      cin >> choice;
      } while ( choice == 'y');
      
      
 
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.07.2011, 23:09     Поиск строк #5
Нет, я не про код.

Данные на входе и на выходе, я это имел в виду.
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 23:10  [ТС]     Поиск строк #6
Цитата Сообщение от xAtom Посмотреть сообщение
Просто заменить - это легко делается методов куча, дальше ничего не понял.
Не заменить , а
Цитата Сообщение от xAtom Посмотреть сообщение
вообщем я хочу написать работующую программу которая бы убирала из строки символы запятые и конвертировала бы эту строку в long double.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.07.2011, 23:12     Поиск строк #7
Убирем мы все запятые, и как мы из набора цифр вещественное число получим? Или я что-то не так понимаю. Я поэтому и попросил пример входных и выходных данных.
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 23:13  [ТС]     Поиск строк #8
Цитата Сообщение от neske Посмотреть сообщение
Нет, я не про код.

Данные на входе и на выходе, я это имел в виду.
Вход

C++
1
2
3
4
string a="124,487,471,217"
 
                     //или
char a[]='124,487,471,217'
Выход

C++
1
long double b=124487471217
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.07.2011, 23:22     Поиск строк #9
Меня просто смутил тип double, я думал мы должны получить нецелое число.
Если вы хотите большие числа переводить, лучше длинную арифметику приписать.

Как вариант, можно сделать так -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <sstream>
 
int main () {
 
    std::string str ("124,487,471,217");
    int temp = str.find(',');
    while (temp != std::string::npos) {
        str.erase(temp, 1);
        temp = str.find(',');
    }
 
    long double var;
    std::istringstream in(str);
    in >> var;
 
    return 0;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.07.2011, 23:32     Поиск строк #10
Цитата Сообщение от neske Посмотреть сообщение
int temp = str.find(',');
* * while (temp != std::string::npos) {
* * * * str.erase(temp, 1);
* * * * temp = str.find(',');
* * }
=>
C++
1
str.erase(std::remove(str.begin(), str.end(), ','), str.end());
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.07.2011, 23:33     Поиск строк #11
Да, что-то я не сообразил)
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
14.07.2011, 23:38  [ТС]     Поиск строк #12
Цитата Сообщение от neske Посмотреть сообщение

while (temp != std::string::npos)

std::istringstream in(str);

}[/CPP]
Я не понимаю вот этого. Не могли бы вы пояснить ?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
14.07.2011, 23:48     Поиск строк #13
std::string::npos
Указывает на конец строки, то есть вне допустимого диапозона уже.
Численно равно -1, что и вернет метод .find при неудаче.

А на счет istringstream, это уиверсальный поток ввода. Подробнее можно прочитать на http://www.cplusplus.com/reference/i...istringstream/

Добавлено через 3 минуты
А строку str мы сразу помещаем в буфер. - in(str);
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
16.07.2011, 19:51  [ТС]     Поиск строк #14
А можно как полегче решить ? Просто я сейчас не на тком уровне знания языка чтоб понимать такие констркукции . Вот задание. А можно как-то мой алгоритм переделать ?
Миниатюры
Поиск строк  
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
16.07.2011, 22:42     Поиск строк #15
Значит все руками, там же есть пояснения е задаче.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
16.07.2011, 22:58     Поиск строк #16
parkito, у Вас в задании все расписано и разжевано, даже думать не нужно - просто реализовать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2011, 23:28     Поиск строк
Еще ссылки по теме:

Поиск строк в файле по маске C++
C++ Поиск в массиве строк
C++ Поиск строк с нулевыми элементами

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

Или воспользуйтесь поиском по форуму:
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
16.07.2011, 23:28  [ТС]     Поиск строк #17
так функция _atold не работает. А мой алгоритм с другой функцией тоже не работоспособный.
Yandex
Объявления
16.07.2011, 23:28     Поиск строк
Ответ Создать тему
Опции темы

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