Вводить сразу целую строку и с помощью strtok разбить на слова - C (СИ)

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

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

Всем привет,как можно вводить сразу целую строку и с помощью strtok разбить на слова,как нибудь через двойной массив?(ниже код сортирует слова по алфавиту)
 #include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <malloc.h>
void sort(char *words[],int size) {
 
    int n,m,code;
    char *temp;
    for(n=1; n<size; n++)
        for(m=0; m<size-n; m++) {
            code=strcmp(words[m],words[m+1]);
            if(code>0) {
                temp=words[m];
                words[m]=words[m+1];
                words[m+1]=temp;
            }
        }
    printf("\nsort:\n");
    for (n = 0; n < size; n++)
        printf("%s ",words[n] );
    }

int main() {
 
char *words[5];
 
char word[5][50];
int i;
for (i=0;i<5;i++){
   printf("slovo:");
    gets(word[i]);
    words[i]=word[i];
}
 
    int size =sizeof(words)/sizeof(char*);
    sort(words,size);
 
}

Решение задачи: «Вводить сразу целую строку и с помощью strtok разбить на слова»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int comp_n(const void* a, const void* b)
{
        char** sa = (char**)a;
        char** sb = (char**)b;
        return strcmp(*sa, *sb);
}
 
int main (void)
{
        int i;
        int j = 0;
        char buff[255];
        scanf("%254[^\n]", buff);
        char del[2] = " ";
        char *word;
        char* pbuff[10];  // максимум на десять строк
        word = strtok(buff, del);
 
        for(i = 0; word != '\0'; i++)
        {
                pbuff[i] = malloc(strlen(word));
                strcpy(pbuff[i], word);
                word = strtok('\0', del);
        }
        qsort(pbuff, i, sizeof(char*), comp_n);
        for(; i > 0; i--)
        {
                printf("%s\n", pbuff[j]);
                j++;
        }
        return 0;
}

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

  1. Включаются необходимые заголовочные файлы: stdio.h, string.h и stdlib.h
  2. Определяется функция сравнения, необходимая для работы функции qsort
  3. Задается входной параметр функции main
  4. Создаются необходимые переменные:
    • i - счетчик строк в массиве pbuff
    • j - счетчик выводимых строк
    • buff - буфер для ввода строки
    • del - строка-разделитель
    • word - текущее слово
    • pbuff - массив указателей на строки
  5. Ввод строки с помощью функции scanf
  6. Создание пустого указателя word
  7. Переменная word инициализируется первым словом в строке
  8. Создание массива pbuff на 10 элементов
  9. Цикл for собирает слова в массив pbuff
  10. Массив pbuff сортируется функцией qsort с использованием функции сравнения comp_n
  11. Цикл for выводит отсортированные строки в обратном порядке
  12. В конце программы возвращается 0, что означает успешное выполнение

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

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