Напечатайте каждое слово предложения в новой строке.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {

    char *s;
    s = malloc(1024 * sizeof(char));
    scanf("%[^
]", s);
    s = realloc(s, strlen(s) + 1);

    char *c = malloc(1024);

    while(*s!='')
    {
        if(*s != ' ')
        *c = *s ;
        else
        *c = '
'
        c++,s++;
    }

    *c = ''

    printf("%s",c);

    //Write your logic to print the tokens of the sentence here.
    return 0;
}

я не могу напечатать слова в разных строках с этим кодом. Куда я иду не так ?? Это нормально, если я просто определю указатель c или необходимо выделить его размер, если я хочу выполнить заданную задачу?

Всего 2 ответа


Напечатайте каждое слово предложения в новой строке ...

Это нормально, если я просто определю указатель c [?] ...
(Вам даже не нужно определять c .)

Как альтернативное упрощение заявленной цели ...
Это можно сделать без выделения памяти или с помощью scanf , просто используя метод ввода из командной строки, а затем проанализируйте argv как показано, с использованием putc(*s, stdout) при проверке каждого символа:

Протестировано с "This is a sentence" в командной строке: (например, prog.exe "This is a sentence"<return> ) (не забывайте вводить ввод пробелами в двойных кавычках.)

int main(int argc, char *argv[]) {

    if(!((argc == 2) && strlen(argv[1]) > 2)) return 0;

    char *s = argv[1];

    while(*s!='')
    {
        if(*s != ' ')
            putc(*s, stdout);
        else    
            putc('
', stdout);
        s++;
    }
    return 0;
}

Основная проблема заключается в том, что вы увеличиваете c в цикле, поэтому, когда вы пытаетесь напечатать его в конце, он указывает на конец построенной строки. Вы можете сделать что-то вроде этого, чтобы исправить это

    char *c = malloc(1024);
    char *c_start = c;
    .
    .
    .
    printf("%s",c_start);

Также закройте строку с '' перед печатью, как *c = '' ;