Вводить сразу целую строку и с помощью 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, что означает успешное выполнение