Вводить сразу целую строку и с помощью 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, string.h и stdlib.h
- Определяется функция сравнения, необходимая для работы функции qsort
- Задается входной параметр функции main
- Создаются необходимые переменные:
- i - счетчик строк в массиве pbuff
- j - счетчик выводимых строк
- buff - буфер для ввода строки
- del - строка-разделитель
- word - текущее слово
- pbuff - массив указателей на строки
- Ввод строки с помощью функции scanf
- Создание пустого указателя word
- Переменная word инициализируется первым словом в строке
- Создание массива pbuff на 10 элементов
- Цикл for собирает слова в массив pbuff
- Массив pbuff сортируется функцией qsort с использованием функции сравнения comp_n
- Цикл for выводит отсортированные строки в обратном порядке
- В конце программы возвращается 0, что означает успешное выполнение
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д