Заменить 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