Вам, наверное, известно, что некоторые символы, записанные на листе бумаги, после поворота этого листа на 180ᶱ также можно прочитать, хотя и по-другому. Так, прописные латинские буквы H, I, N, O, S, X, Z и цифра 0 после поворота читаются так же, а буква M и цифра 6 «превращаются» соответственно в символы W и 9, и наоборот. Непустую строку, состоящую из прописных латинских букв и цифр, будем называть словом-перевёртышем, если она составлена только из перечисленных выше символов. После поворота листа это слово также можно прочитать, хотя и по-другому. Так, строка HOW «превращается» в строку MOH. С другой стороны, строка HOME словомперевёртышем не является. Найдите все слова-перевёртыши во входном файле. Формат входных данных. Первая строка входного файла содержит величину K (1 ≤ K ≤ 1000) – количество обрабатываемых в дальнейшем строк. Каждая из последующих K строк состоит только из прописных латинских букв и цифр, пустых строк нет. Длина одной строки не превосходит 3000 символов
Формат выходных данных. В первой строке выведите одно число – количество найденных слов-перевёртышей. Каждая из последующих строк должна содержать строку, которая получится из очередного слова перевёртыша после поворота листа бумаги. Слова-перевёртыши нужно выводить в том порядке, в котором они встречаются во входном файле. В начале и конце каждой строки не должно быть пробелов
НАПИСАТЬ ПРОГРАММУ
//Максимальная длина вводимой строки#define Mx_s 255
//Массив символов, которые //необходиом удалить в начале и конце строкиchar sim[] = { '\t', ' '};//Функция проверяющая входит ли данный символ c в массив simint char_in_arr(char c) { int f = 0; for (int i = 0; i < strlen(sim); i++) { if (c == sim[i]) { f = 1; break; } } return f;}
int main(){ setlocale(LC_ALL, "rus"); //Вводимая строка char s[Mx_s]; //Ввод данных printf("\n >> Введите строку\n <<"); fgets(s, Mx_s, stdin); int l = strlen(s) - 1; //Переменные для определения отсечений в начале и конце строки int pos_b = 0; int pos_e = l-1; //Проверяем начало строки //Если нам попадаются удаляемые символы то увеличиваем значение pos_b for (;(pos_b < l) && char_in_arr(s[pos_b]); pos_b++) {}
//Проверяем конец строки //Если нам попадаются удаляемые символы то уменьшаем значение pos_e for (;(pos_e >= 0) && (char_in_arr(s[pos_e])); pos_e--) {}
//Длина отсеченного отрезка int l2 = pos_e - pos_b + 1; //Если длина корректа то if (l2 > 0) { //Строка для результата char s2[Mx_s];
//Идем по строке s1 int pos = 0; for (int i = pos_b, k_s = 0; i <= pos_e; i++) { //Считаем пробелы, идущие подряд if (s[i] == ' ') k_s++; else k_s = 0;
//Если это не подряд идущие пробел if (k_s < 2) { //записываем символ в s2 s2[pos] = s[i]; pos++; } } s2[pos] = '\0';
//Вывод результат printf("\n >> Результат\n <<"); fputs(s2,stdout); } else //Строка пуста/Содержит только символы из массива sim printf("\n >> Ошибка в строке\n");
system("pause>>void"); return 0;}