Написать функцию, преобразующую строку символов так, что между словами всегда находится два пробела - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать функцию, преобразующую строку символов так, что между словами всегда находится два пробела. Вот попробовал что то написать:
#include <stdio.h>
#include <conio.h>
 
void qwerty(char *s)
{
    char *s=new char[100];
    char *w=new char[100];
    for(int i=0, k=0; i<100; i++, k++)
    {
        if(s[i]==' ' || s[i]=='\0')
        {
            w[k]='\0';
            if(k>0)
            printf("%s  ", w);
            k=-1;
        }
        else
            w[k]=s[i];
    }
}
void main (void)
{
    char *stringPtr=new char[100];
    char *wordsPtr=new char[100];
    puts("Enter string:");
    gets(stringPtr);
    puts("The resulting string:");
    printf("%s", qwerty(stringPtr));
    getch();
}
С функциями плохо дружу, мало читал литературы Друзья, помогите доработать код

Алгоритм:

Разбиваем строку на слова и выводим эти слова через 2 пробела вот код разбиения строки на слова и вывода строки, в которой между словами 2 пробела.
#include <stdio.h>
#include <conio.h>
 
void main (void)
{
    char *stringPtr=new char[100];
    char *wordsPtr=new char[100];
    gets(stringPtr);
    for(int i=0, k=0; i<100; i++, k++)
    {
        if(stringPtr[i]==' ' || stringPtr[i]=='\0')
        {
            wordsPtr[k]='\0';
            if(k>0)
            printf("%s  ", wordsPtr);
            k=-1;
        }
        else
            wordsPtr[k]=stringPtr[i];
    }
    getch();
}

Решение задачи: «Написать функцию, преобразующую строку символов так, что между словами всегда находится два пробела»

textual
Листинг программы
void print(char* str) {
 
        char *p = str;
 
        int flag=0;
 
        while (*p) {
 
                if (*p == ' ' || *p == ',' || *p == '\t') {
                        if (!flag) {
                                flag=1;
                                printf("  ");
                        }
                } 
                else {
                        putchar(*p);
                        flag=0;
                }
 
                p++;
 
        }
}
 
int main() {
        char str[]  = "qweqweqwe sgfg geerge,  egerge ergeg   erger    erge ererg";
        print(str);
        getchar();
}

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

  1. Объявлена функция print с параметром char* str.
  2. В функции создана переменная p, которая будет использоваться как указатель на текущий символ входной строки.
  3. Создана переменная flag со значением 0. Она используется для отслеживания того, было ли найдено пробельное или знаковое поле (пробел, запятая, табуляция).
  4. В цикле while происходит проход по каждому символу входной строки.
  5. Если текущий символ является пробелом, запятой или табуляцией и переменная flag равна 0, то значение flag меняется на 1 и выводится дополнительный пробел.
  6. Если текущий символ не является пробелом, запятой или табуляцией, то он выводится на экран, а переменная flag меняется на 0.
  7. После обработки каждого символа указатель p увеличивается на 1.
  8. В конце функции main создается строка str, которая передается в функцию print.
  9. В конце функции main вызывается функция getchar для ожидания нажатия клавиши.
  10. Входные данные для функции print: qweqweqwe sgfg geerge,  egerge ergeg   erger    erge ererg.
  11. Выходные данные функции print: qwe qwe qwe sgfg geerge egeg erger erge ererg.

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


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

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

9   голосов , оценка 4.111 из 5
Похожие ответы