Заменить cout на printf - C (СИ)
Формулировка задачи:
Собственно нужно заменить cout на printf. Сам перепробовал различные варианты выводит чушь. Точно как правильно сделать не знаю, поэтому прошу помощи
#include <stdio.h> #include <iostream> //iostream оставил, чтоб было понятно как работает прога/ using namespace std; // В строке символов найти палиндромы. Вывести их. Использовать только библиотеку <stdio.h> size_t slen(const char * m) //своя strlen { size_t len = 0; while (*(m++)) ++len; return len; } char * separators = " ,.;/*-+~!@#$%^&*()_+\\"; int is_separator( char c ) { for ( int i = 0; i < slen( separators ); i++ ) { if ( c == separators[i] ) return 1; } return 0; } int is_palindrom( char *s, int n ) { for ( int i = 0; i < n / 2; i++ ) { if ( s[i] != s[n - i - 1] ) return 0; } return 1; } int main() { int i, j, k, len; char s[256]; printf ("Vvedi stroku: "); gets(s); for ( i = 0; i < slen( s ); ) { while ( is_separator( s[i] ) ) i++; j = i; while ( !is_separator( s[i] ) && s[i] != '\0' ) i++; len = i - j; if ( is_palindrom( &s[j], len ) ) { for ( k = j; k < i; k++ ) { cout << s[k]; //сама трабла } printf("\n"); } } return 0; }
Решение задачи: «Заменить cout на printf»
textual
Листинг программы
#include <stdio.h> char separators[] = " ,.;/*-+~!@#$%^&*()_+\\"; // В строке символов найти палиндромы. Вывести их. Использовать только библиотеку <stdio.h> size_t slen(const char * m) //своя strlen { size_t len = 0; while (m[len] != '\0') len = len + 1; return len; } int is_separator( char c ) { int i; int isSeparator = 0; for (i = 0; i < slen( separators ) && !isSeparator; i++ ) { if(separators[i] == c) isSeparator = 1; } return isSeparator; } int is_palindrom( char *s, int n ) { int i; int isPalindrom = 1; for (i = 0; i < n / 2 && isPalindrom; i++ ) { if ( s[i] != s[n - i - 1] ) isPalindrom = 0; } return isPalindrom; } int main() { int i, j, k, len; char s[256] = {0}; printf ("Vvedi stroku: ");gets(s); for ( i = 0; i < slen( s ); ) { while ( is_separator( s[i] ) && s[i] != '\0') i = i + 1; j = i; while ( !is_separator( s[i] ) && s[i] != '\0' ) i = i + 1; len = i - j; if ( is_palindrom( &s[j], len ) ) { for ( k = j; k < i; k = k + 1 ) printf("%c", s[k]); //сама трабла printf("\n"); } } return 0; }
Объяснение кода листинга программы
- Объединение всех входов в функцию main()
- Создание строки-разделителя с использованием массива символов
,.;/*-+~!@#$%^&*()_+\\
- Определение функции is_separator(char c), которая проверяет, является ли символ c разделителем
- Определение функции is_palindrom(char *s, int n), которая проверяет, является ли строка s палиндромом
- Использование функции is_separator в цикле while для пропуская разделителей в строке
- Использование функции is_palindrom в условном операторе if для проверки, является ли подстрока палиндромом
- Использование функции printf() для вывода найденных палиндромов
- Использование функции slen(const char * m) для определения длины строки m
- Объявление переменных i, j, k, len типа int
- Объявление массива символов s типа char с размером 256 и инициализацией его нулевыми значениями
- Использование функции printf() для вывода сообщения
Vvedi stroku:
и считывание строки с помощью функции gets(s) - Использование цикла for для прохода по всем символам строки s
- Использование условного оператора if для проверки, является ли текущий символ разделителем
- Использование цикла while для прохода по всем символам подстроки, которая не является разделителем
- Использование функции is_palindrom для проверки, является ли подстрока палиндромом
- Использование условного оператора if для проверки, является ли подстрока палиндромом
- Использование цикла for для вывода найденных палиндромов с помощью функции printf()
- Возврат значения 0 из функции main(), что означает успешный конец работы программы
- Ввод строки
abba
и ожидаемый выводabba
- Ввод строки
abcba
и ожидаемый выводabcba
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д