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

Объяснение кода листинга программы

  1. Объединение всех входов в функцию main()
  2. Создание строки-разделителя с использованием массива символов ,.;/*-+~!@#$%^&*()_+\\
  3. Определение функции is_separator(char c), которая проверяет, является ли символ c разделителем
  4. Определение функции is_palindrom(char *s, int n), которая проверяет, является ли строка s палиндромом
  5. Использование функции is_separator в цикле while для пропуская разделителей в строке
  6. Использование функции is_palindrom в условном операторе if для проверки, является ли подстрока палиндромом
  7. Использование функции printf() для вывода найденных палиндромов
  8. Использование функции slen(const char * m) для определения длины строки m
  9. Объявление переменных i, j, k, len типа int
  10. Объявление массива символов s типа char с размером 256 и инициализацией его нулевыми значениями
  11. Использование функции printf() для вывода сообщения Vvedi stroku: и считывание строки с помощью функции gets(s)
  12. Использование цикла for для прохода по всем символам строки s
  13. Использование условного оператора if для проверки, является ли текущий символ разделителем
  14. Использование цикла while для прохода по всем символам подстроки, которая не является разделителем
  15. Использование функции is_palindrom для проверки, является ли подстрока палиндромом
  16. Использование условного оператора if для проверки, является ли подстрока палиндромом
  17. Использование цикла for для вывода найденных палиндромов с помощью функции printf()
  18. Возврат значения 0 из функции main(), что означает успешный конец работы программы
  19. Ввод строки abba и ожидаемый вывод abba
  20. Ввод строки abcba и ожидаемый вывод abcba

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5