0 / 0 / 0
Регистрация: 01.02.2017
Сообщений: 12
1

Сравнение нескольких переменных типа стринг

01.02.2017, 21:44. Показов 1333. Ответов 8
Метки нет (Все метки)

Есть код, в котором нужно сравнивать 3 временных промежутка, и по результатом сравнения выводит, как не странно, результат. Все бы хорошо, но каждый раз когда я компилю код в г++, он(компилятор) говорит, что оператор == перегружен ([Error] no match for 'operator==' (operand types are '__gnu_cxx::__enable_if<true, bool>::__type {aka bool}' and 'std::string {aka std::basic_string<char>}'), сл-но не может скомпилировать. Объясните моей тупой голове как это пофиксить.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
using namespace std;
int N;
string *condOfSys = new string [N];
string *outPut = new string [N];
const string condHotter = "hotter";
const string condHot = "hot";
const string condWarm = "warm";
const string condCold = "cold";
const string condColder = "colder";
bool sysCooler = 0;
bool sysHeater = 0;
int N1; //предыдущий элемент массива
int N2; // предпредыдущий элемент массива
string o1;
string o2;
string o3;
int p = 1;
 
int main()
{
    start:cin >> N;//ввод кол-ва температурных промежутков
    if (N >= 3)//да, это костыль
    {
        cin >> condOfSys [1];
        cin >> condOfSys [2];
        cin >> condOfSys [3];
    }
    else//если сравнивать менее 3 промежутков то фигня получается
    {
    cout << "incorrect input";
    goto start;
    }
    for(int i = 3; i < N; i++)
    {
        N1 = i - 1;
        N2 = i - 2;
        if (i > 3)
        o1 = condOfSys [i];
        o2 = condOfSys [N1];
        o3 = condOfSys [N2];
        {
            cin >> condOfSys [i];
        }
        if (o1 == o2 == o3 == condHotter )
        {
            if (sysHeatter == 1)
            {
                sysCooler = 1;
                sysHeater = 0;
                outPut[p] = "heater off; cooler on";
            }
            else
            {
                sysCooler = 1;
                outPut [p] = "cooler on"; 
            }
        }
        if (condOfSys [i] == condOfSys [N1] == condOfSys[N2] == condHot)
        {
            sysHeater = 0;
            outPut [p] = "heater off";
        }
        if (condOfSys [i] == condOfSys [N1] == condOfSys[N2] == condWarm)
        {
            outPut [p] = "none";
        }
        if (condOfSys [i] == condOfSys [N1] == condOfSys[N2] == condCold)
        {
            sysCooler = 0;
            outPut [p] = "cooler off";
        }
        if (condOfSys [i] == condOfSys [N1] == condOfSys[N2] == condColder)
        {
            if (sysCooler == 1)
            {
                sysCooler = 0;
                sysHeater = 1;
                outPut [p] = "cooler off; heater on";
            }
            else
            {
                sysHeater = 1;
                outPut [p] = "heater on";
            }
        }
        p++;
    }
    p = 1;
    while (p < N)
    {
        cout << outPut[p] << endl;
        p++;
    }
    delete outPut [];
    delete condOfSys [];
    return 0;
    system("pause");
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2017, 21:44
Ответы с готовыми решениями:

Сравнение переменных типа стринг
Помогите разобраться что не так в программе. Сама программа большая, работает хорошо, но непонятный...

Сравнение нескольких переменных
Есть слегка странное задание. Есть 10 отдельных переменных(v1, v2, v3, ...) типа int, которым...

Сравнение переменных структурного типа
Всем доброго времени суток, объяснить пожалуйста, как можно сравнить переменную типа структуры с...

Сравнение двух переменных типа string
Я решаю одну задачу, в ней нужно сделать бинарное дерево поиска, но суть не в это. При поиске по...

8
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
01.02.2017, 21:59 2
Лучший ответ Сообщение было отмечено Anistr0phy как решение

Решение

C++
1
o1 == o2 == o3 == condHotter
Так можно поступать только с оператором присваивания. Сравнивать же нужно по два значения за раз:
C++
1
o1 == o2 && o2 == o3 && o3 == condHotter
1
Любитель чаепитий
3734 / 1793 / 563
Регистрация: 24.08.2014
Сообщений: 5,998
Записей в блоге: 1
02.02.2017, 05:49 3
Цитата Сообщение от Anistr0phy Посмотреть сообщение
C++
1
2
3
int N;
string *condOfSys = new string [N];
string *outPut = new string [N];
Классно вы UB сделали. )))
0
Модератор
Эксперт по электронике
8782 / 6568 / 891
Регистрация: 14.02.2011
Сообщений: 23,068
02.02.2017, 06:15 4
Цитата Сообщение от Anistr0phy Посмотреть сообщение
C++
1
cin >> condOfSys [1];
массивы в Си, а равно и в С++ начинаются с 0
правда как в
Цитата Сообщение от Anistr0phy Посмотреть сообщение
г++
не знаю
0
Любитель чаепитий
3734 / 1793 / 563
Регистрация: 24.08.2014
Сообщений: 5,998
Записей в блоге: 1
02.02.2017, 06:39 5
Цитата Сообщение от ValeryS Посмотреть сообщение
правда как в
Цитата Сообщение от AnistrOphy
г++
не знаю
Думаю, речь g++ шла.
А там тоже с 0. Но в любом случае там UB, ибо кол-во строк в этом массиве измеряется N, а чему равно N???
0
Модератор
Эксперт по электронике
8782 / 6568 / 891
Регистрация: 14.02.2011
Сообщений: 23,068
02.02.2017, 07:41 6
Цитата Сообщение от GbaLog- Посмотреть сообщение
Но в любом случае там UB,
ну это то понятно
просто ты уже отметил это, я не стал заострять
Цитата Сообщение от GbaLog- Посмотреть сообщение
а чему равно N???
равно 0
глобальные переменные по умолчанию инициализируются 0
0
GbaLog-
02.02.2017, 07:44
  #7

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
глобальные переменные по умолчанию инициализируются 0
Вот именно! А массивы размера 0 - UB. :)
Вернее не так. Сами массивы - не UB, а вот обращение к ним уже UB. :)

0
Неэпический
17806 / 10577 / 2042
Регистрация: 27.09.2012
Сообщений: 26,592
Записей в блоге: 1
02.02.2017, 10:41 8
Цитата Сообщение от Anistr0phy Посмотреть сообщение
Сравнение нескольких переменных типа стринг
Пусть будет...
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
#include <iostream>
#include <string>
#include <type_traits>
 
 
namespace details{
    template<typename ... Values>
    bool isAllTrue(Values &&... values)
    {
        return (... && values);
    }
}
 
 
 
 
 
template<typename T, typename ... Args>
bool equalValues(T &&one, Args &&... other)
{
    //is same? O_o
    return details::isAllTrue((std::forward<T>(one) == std::forward<Args>(other))...);
}
 
 
int main()
{
    std::string str1 = "my string";
    std::string str2 = "my string";
    std::string str3 = "my string";
    std::cout << equalValues(str1, str2, str3);
}
http://rextester.com/KOWZ41315
1
Любитель чаепитий
3734 / 1793 / 563
Регистрация: 24.08.2014
Сообщений: 5,998
Записей в блоге: 1
02.02.2017, 10:48 9
Цитата Сообщение от Croessmah Посмотреть сообщение
Пусть будет...
All in compile-time!!!
http://rextester.com/BJQ54397
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
//clang 3.8.0
 
#include <iostream>
#include <string>
#include <type_traits>
#include <experimental/string_view>
 
 
namespace details{
    template<typename ... Values>
    bool isAllTrue(Values &&... values)
    {
        return (... && values);
    }
}
 
 
 
 
 
template<typename T, typename ... Args>
bool equalValues(T &&one, Args &&... other)
{
    //is same? O_o
    return details::isAllTrue((std::forward<T>(one) == std::forward<Args>(other))...);
}
 
 
int main()
{
    std::experimental::string_view str1 = "my string";
    std::experimental::string_view str2 = "my string";
    std::experimental::string_view str3 = "my string";
    std::cout << equalValues(str1, str2, str3);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2017, 10:48
Помогаю со студенческими работами здесь

Сравнение переменных типа string
Подскажите пожалуйста , почему при проверке строки : не пустая ли она , выдает сообщение ???? ...

Сравнение переменных разного типа
Не задача, просто любопытно, почему именно так? static void Main(string args) { int i =...

Приравнивание/Сравнение переменных типа char
Вообщем, есть такой вопрос, мне нужно приравнять в условии одну переменную типа char к какому...

Сравнение двух переменных типа String, одна из которых с консоли
Викторина. На моем пк работает как нужно, пользуюсь Intellij IDEA. Однако на другом пк возникают...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru