Проверка равняется ли строка какому-либо слову(набору букв и цифр)
Ребят, как проверить равняется ли строка какому-либо слову(набору букв и цифр)? То есть сперва идёт ввод cin >> строки, а потом проверка, равняется ли строка набору букв и цифр
cin >> SpectrClass;
if (SpectrClass == "O5" || "o5") {
cout << "T(Температура)=38000," << "Цвет звезды Голубой";
}
else if (SpectrClass == "O7" || "o7") {
cout << "T(Температура)=37000," << "Цвет звезды Голубой";
}
Вот пример, скажите можно ли так делать, до else if вообще не доходит, выводится первый cout и на этом всё.
Ответы (2 шт):
Вы неправильно написали вторые части условий. Вот Вы пишете: SpectrClass == "O5", а дальше пишете: "или o5". А что o5-то? Нужно писать так:
#include <iostream>
using namespace std;
int main()
{
string SpectrClass;
cin >> SpectrClass;
if (SpectrClass == "O5" || SpectrClass =="o5")
cout << "T(Температура)=38000," << "Цвет звезды Голубой";
else if (SpectrClass == "O7" || SpectrClass =="o7")
cout << "T(Температура)=37000," << "Цвет звезды Голубой";
}
В принципе вы в правильном направлении с желанием уменьшить количеств условий и повторений(основное преимущество ООП).
Способы решения могут быть несколько и разные в зависимости от конкретной задачи с учетом критичности быстроты и занимаемой памяти. Обычно подобные задачи решаются разными родами ассоциативными контейнерами(например std::map). Конкретный пример, приведенный вопросе, можно решить и проще. Просто берем слова из какого то хранилища и сравниваем с введенной строкой, и по месту слова в хранилище определяем соответствующие данные(в данном случаи значение температуры ):
const string ss[] = { "05", "o5","07", "o7" };
const int t[] = { 3800, 3700 }; // температура
auto p = std::find(ss, ss + 4, SpectrClass);
if(p!= std::end(ss))
cout << "T(Температура) = " << t[(p - ss) / 2] << ". Цвет звезды Голубой";
Если сравнение без учета регистра используется часто, то целесообразно написать такой предикат(функция, функтор) и уменьшить количество сравнений.