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

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

Войти
Регистрация
Восстановить пароль
 
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
#1

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

28.01.2011, 18:34. Просмотров 524. Ответов 9
Метки нет (Все метки)

Дана строка вида: 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++
код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; int main() { char s1, char s2; ...

Работа со строками - C++
Здравствуйте! Прошу помочь разобраться с программой, она не работает, и я не могу понять почему. #include &lt;iostream&gt; #include...

Работа со строками - C++
char *B = new char ; cout &lt;&lt; &quot;Введите текст произвольной длины: &quot; ; cin.getline( B, 50); cout &lt;&lt; &quot;Введенный текст: &quot; &lt;&lt; B; ...

Работа со строками - C++
Задание &quot;Есть строка, состоящая из слов, разделенных любым количеством пробелов. При введении русского текста, пользователь забыл...

Работа с строками - C++
С клавиатуры вводится строка. Разработать программу, которая реализует указанные действия. а) замінює всі великі літери, що входять до...

Работа с строками - C++
И так дано StrCChar (s, c1, s2, n) надо заменить все символы c1 в строке s, начиная с позиции n, на строку s2. Надо на с++ и желательно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
211 / 211 / 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
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
28.01.2011, 19:09     простейшая работа со строками #8
так правильно. к примеру 10+10 - это уже не как у вас, 3 символа в строке а 5. тут надо как то с помощью цикла, пока правда не дойдет до меня каким образом)
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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++
Всем привет. Есть такой код void makeStr() { std::string testStr = &quot;Take String&quot;; char *ch_arr =...

Работа со строками - 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     простейшая работа со строками
Ответ Создать тему
Опции темы

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