Другие языки программирования и технологии

Пользователь вводит строку. Найти и вывести из строки римские цифры от 1 до 5, введенные прописными символами.

#include
using namespace std;
int main()
{
int i, n=70;
char s[n]; //объявление строковой переменной
cin.getline(s,70); //ввод строки
for(i=0;i<n;i++) //цикл перебирающий элементы массива
{
if(s[i]=='I' & s[i+1]!='I' & s[i+1]!='V')
{i++;continue;}
if(s[i]=='I' & s[i+1]=='I' & s[i+2]!='I')
{i++;continue;}
if(s[i]=='I' & s[i+1]=='I' & s[i+2]=='I')
{i++;continue;}
if(s[i]=='I' & s[i+1]=='V' & s[i+1]!='I')
{i++;continue;}
if(s[i]=='V' & s[i+1]!='I' & s[i+1]!='V')
{i++;continue;}
}
cout<<s[i]; //вывод элемента
}

Код выводит @. Что не так?
https://ideone.com/5A2ztK

string a;
while(cin>>a){
if(a=="I")cout<<"I ";
if(a=="II")cout<<"II ";
if(a=="III")cout<<"III ";
if(a=="IIII")cout<<"IV "; // редкое но допустимое написание
if(a=="IV")cout<<"IV ";
if(a=="V")cout<<"V ";
}
OO
Otabek Otabek
71 404
Лучший ответ
#include <iostream>
using namespace std;
int main(){
string s;
getline(cin, s);
for (int i = 0; i < s.length();)
if (s[i] == 'I' && i < s.length() - 1 && s[i + 1] == 'V')
cout << "IV ", i += 2;
else if (s[i] == 'V')
cout << "V ", i++;
else if (s[i] == 'I' && i < s.length() - 2 && s[i + 1] == 'I' && s[i + 2] == 'I')
cout << "III ", i += 3;
else if (s[i] == 'I' && i < s.length() - 1 && s[i + 1] == 'I')
cout << "II ", i += 2;
else if (s[i] == 'I')
cout << "I ", i++;
else
i++;
cin.get();
return 0;
}

#include <iostream>
using namespace std;
int main(){
string s;
getline(cin, s);
for (int i = 0; i < s.length();)
if (i < s.length() - 1 && s.substr(i, 2) == "IV")
cout << "IV ", i += 2;
else if (s[i] == 'V')
cout << "V ", i++;
else if (i < s.length() - 2 && s.substr(i, 3) == "III")
cout << "III ", i += 3;
else if (i < s.length() - 1 && s.substr(i, 2) == "II")
cout << "II ", i += 2;
else if (s[i] == 'I')
cout << "I ", i++;
else
i++;
cin.get();
return 0;
}
Что не так - сложно сказать: надо вникать в ваш алгоритм. Проще написать по-своему. Пользуйтесь отладчиком, чтоб найти ошибку.
Самое простое: сравнить строку с восьмью (или пятью?) римскими числами. Это не оптимально, но код получится короче.
Erik Ratkuns
Erik Ratkuns
58 065

Похожие вопросы