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

простейшая работа со строками - C++

Восстановить пароль Регистрация
 
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
28.01.2011, 18:34     простейшая работа со строками #1
Дана строка вида: XOY, где X и Y – натуральные числа в десятичной системе счисления, значения которых не превышают 100, а O – один из возможных знаков математической операции: +, -, : (деление без остатка). Определите результат вычисления выражения, заданного этой строкой.
Формат входного файла

Во входном файле Input.txt содержится строка, соответствующая условию задачи.
Формат выходного файла

В выходной файл Output.txt вывести найденное число в десятичной системе счисления.
Мой код:
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 <iostream>
#include <sstream>
using namespace std;
int main()
{
string S;
    cin>>S;
if(S[1]=='+')
{
cout<<(int)S[0]+int(S[2])<<endl;
}
else
{
if(S[1]=='-')
{
    cout<<int(S[0])-int(S[2])<<endl;
}
else
    if(S[1]==':')
    {
    cout<<int(S[0])/int(S[2])<<endl;
    }
}
    system("pause");
}
но когда я начинаю тестить, 7:2=1, 7-2=5(единственное правильное), 7+2=105;
в чём ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2011, 18:34     простейшая работа со строками
Посмотрите здесь:

Работа со строками в C++ C++
C++ Работа со строками
Работа со строками. C++
работа мо строками C++
Работа со строками C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
209 / 209 / 16
Регистрация: 26.12.2010
Сообщений: 691
28.01.2011, 18:44     простейшая работа со строками #2
C++
1
2
cout << (int)S[0] << endl;
cout << (int)S[2] << endl;
попробуйте дописать и посмотрите что выводится. посмотрите таблицы asii, скорей всего как то приводится не так как задумано .)

Добавлено через 4 минуты
а 7-5 правильно, так как 55-53 (в представлении asii) и будет 2
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
28.01.2011, 18:45  [ТС]     простейшая работа со строками #3
дааааа, там он считывает, как символы с ascii, а мне нужен int. Как это выполнить?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.01.2011, 18:54     простейшая работа со строками #4
переделал ваш код и кстати чила до 100 она никак не учитывает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
int main()
{
    std::string S;
    std::cin >> S;
    switch(S[1])
    {
     case '+':
    std::cout << S[0] - '0' + S[2] - '0' << std::endl;
    break;
     case '-':
    std::cout << S[0] - '0' - S[2] - '0' << std::endl;
    break;
     case ':':
    std::cout << (S[0] - '0') / (S[2] - '0') << std::endl;
        break;
     }
     system("pause");
     return 0;
}
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
28.01.2011, 18:59  [ТС]     простейшая работа со строками #5
Maxwe11, прога не универсальна(
NiRamz
209 / 209 / 16
Регистрация: 26.12.2010
Сообщений: 691
28.01.2011, 19:03     простейшая работа со строками #6

Не по теме:

все гениальное просто ..))
не знал, спасибо.



Добавлено через 2 минуты
Hi4ko вполне хороший у него вариант, вот ваш код с его решением)
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 <iostream>
#include <sstream>
using namespace std;
int main()
{
string S;
        cin>>S;
if(S[1]=='+')
{
cout<<(int)(S[0] - '0')+(int)((S[2]- '0'))<<endl;
}
else
{
if(S[1]=='-')
{
        cout<<(int)(S[0] - '0')-(int)((S[2]- '0'))<<endl;
}
else
        if(S[1]==':')
        {
        cout<<(double)(S[0] - '0')/(double)((S[2] - '0'))<<endl;
        }
}
        system("pause");
}
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
28.01.2011, 19:05  [ТС]     простейшая работа со строками #7
она ток числа от 1 до 9 посчитать сможет. Надо до 100(
NiRamz
209 / 209 / 16
Регистрация: 26.12.2010
Сообщений: 691
28.01.2011, 19:09     простейшая работа со строками #8
так правильно. к примеру 10+10 - это уже не как у вас, 3 символа в строке а 5. тут надо как то с помощью цикла, пока правда не дойдет до меня каким образом)
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.01.2011, 19:52     простейшая работа со строками #9
Цитата Сообщение от Hi4ko Посмотреть сообщение
она ток числа от 1 до 9 посчитать сможет. Надо до 100(
так бы сразу и писал, а не спрашивал в чем ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
 
int main()
{
    std::string S;
    std::cin >> S;
    size_t sign_pos = S.find_first_of("+-:");
    switch(S[sign_pos])
    {
     case '+':
         std::cout << std::stoi(S) + std::stoi(S.substr(sign_pos+1)) << std::endl;
        break;
     case '-':
        std::cout << std::stoi(S) - std::stoi(S.substr(sign_pos+1)) << std::endl;
        break;
     case ':':
        std::cout << std::stoi(S) / std::stoi(S.substr(sign_pos+1)) << std::endl;
        break;
    }
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2011, 21:11     простейшая работа со строками
Еще ссылки по теме:

Работа со строками . Простейшая прога выдаёт ошибки ( C++
C++ Работа со строками на с++
C++ Работа со строками

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

Или воспользуйтесь поиском по форуму:
Iron Bug
22 / 22 / 0
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 21:11     простейшая работа со строками #10
как-то так:
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
#include <stdio.h>
#include <iostream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
    string str;
    cin >> str;
    istringstream reader(str);
    int x,y;
    char op;
    cout << reader.str() << endl;
    reader >> x;
    cout << x << endl;
    reader >> op;
    cout << op << endl;
    reader >> y;
    cout << y << endl;
    getchar();
    return 0;
}
это пример выковыривания значений. а дальше сам прикручивай обработку через switch(op), чтобы что-то полезное усвоить
P.S. на самом деле, всё это пишется в одну строку (reader >> x >> op >> y). просто тут расписано отдельно по пунктам.
Yandex
Объявления
28.01.2011, 21:11     простейшая работа со строками
Ответ Создать тему
Опции темы

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