Ввод и обращение нескольких строк в C? - PullRequest
0 голосов
/ 22 ноября 2018

Первый раз публикуется на этом форуме, но не первый раз просматривает его!Довольно полезные темы, теперь я чувствую, что пришло время обратиться за помощью, поэтому заранее благодарю тех, кто может мне помочь.

У меня есть следующие строки кода: которые при вводе меняют порядок слов.

т.е. ВХОД: Привет, я Бэтмен. ВЫХОД: Бэтмен, я там. Привет

Теперь я хотел бы позволить пользователю иметь возможность вводить несколько строк, т.е.Бэтмен'' ;''Привет, мир'' ;и т. д. В идеале при вводе они разделяются полуленом и анализируются с ним.

КОД:

#include <stdio.h>

/* function prototype for utility function to
reverse a string from begin to end */
/*Function to reverse words*/
void reverseWords(char* s)
{
    char* word_begin = NULL;
    char* temp = s; /* temp is for word boundry */

    /*STEP 1 of the above algorithm */
    while (*temp) {
        /*This condition is to make sure that the string start with
        valid character (not space) only*/
        if ((word_begin == NULL) && (*temp != ' ')) {
            word_begin = temp;
        }
        if (word_begin && ((*(temp + 1) == ' ') || (*(temp + 1) == '\0'))) {
            reverse(word_begin, temp);
            word_begin = NULL;
        }
        temp++;
    } /* End of while */

    /*STEP 2 of the above algorithm */
    reverse(s, temp - 1);
}


/* UTILITY FUNCTIONS */
/*Function to reverse any sequence starting with pointer
begin and ending with pointer end */
void reverse(char* begin, char* end)
{
    char temp;
    while (begin < end) {
        temp = *begin;
        *begin++ = *end;
        *end-- = temp;
    }
}

/*
int main( void )
{
    int i, n;
    printf("Enter no of strings:");
    scanf("%i", &n);
    char **str = (char **) malloc( n* sizeof(char*));

    for (i = 0; i < n; i++) {
        str[i] = (char*) malloc(100);
        fgets(str[i],100,stdin);
    }

    for (i = 0; i < n; i++) {
        printf("%s", str[i]);
    }

    for (i = 0;  i < n; i++) {
        free(str[i]);
    }
    free(str);
    return 0;
}
*/

/* Driver function to test above functions */
int main()
{

        char str[50];
        char* temp = str;
        printf("Enter a string : ");
        gets(str);
        reverseWords(str);
        printf("%s", str);
        return(0);

}

1 Ответ

0 голосов
/ 22 ноября 2018

Используя strtok, как указано в одном из комментариев, вы можете сделать это следующим образом:

void reverseSentence(char* sent){
    char *argv[25]; // This assumes you have a max of 25 words
    int  argc = 0;
    char* token = strtok(sent, " ");
    while (token != NULL) {
        argv[argc] = malloc(100); // This assumes each word is 99 characters at most
        strcpy(argv[argc++], token);
        token = strtok(NULL, " ");
    }

    for(int z = argc-1; z>=0; z--)
        fprintf(stdout, "%s ", argv[z]);

    fprintf(stdout, "\n");

}

Внимание!Я не тестировал код, поэтому у вас там может быть несколько ошибок ... например, пропущенные точки с запятой, имена переменных не совпадают и т. Д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...