Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //https://vk.com/evgenykravchenko0
- ___ ___ ___
- / /\ ___ / /\ / /\
- / /:/_ /__/\ / /:/_ / /:/_
- / /:/ /\ \ \:\ / /:/ /\ / /:/ /\
- / /:/ /:/_ \ \:\ / /:/_/::\ / /:/ /:/_
- /__/:/ /:/ /\ ___ \__\:\ /__/:/__\/\:\ /__/:/ /:/ /\
- \ \:\/:/ /:/ /__/\ | |:| \ \:\ /~~/:/ \ \:\/:/ /:/
- \ \::/ /:/ \ \:\| |:| \ \:\ /:/ \ \::/ /:/
- \ \:\/:/ \ \:\__|:| \ \:\/:/ \ \:\/:/
- \ \::/ \__\::::/ \ \::/ \ \::/
- \__\/ ~~~~ \__\/ \__\/
- ___
- /__/\ ___ ___
- \ \:\ / /\ / /\
- \ \:\ / /:/ / /:/
- _____\__\:\ /__/::\ /__/::\
- /__/::::::::\ \__\/\:\__ \__\/\:\__
- \ \:\~~\~~\/ \ \:\/\ \ \:\/\
- \ \:\ ~~~ \__\::/ \__\::/
- \ \:\ /__/:/ /__/:/
- \ \:\ \__\/ \__\/
- \__\/
- #include <stdio.h>
- #include <stdlib.h>
- char **strplit(const char *str);
- int main(int argc, char *argv[])
- {
- char src_str[256] = { 0 }, // исходна€ строка
- *dst_str = NULL;
- char **words_arr = NULL;
- int i;
- //memset(src_str, 0, sizeof(src_str));
- printf("¬ведите слова, разделЄнные пробелами:\n");
- gets(src_str);
- words_arr = strplit(src_str);
- if (words_arr) // если функци€ вернула ненулевой результат// выводим все слова в консоль, пока не дойдЄм до нулевого указател€
- {
- printf("—лова из входной строки:\n");
- i = 0;
- while (words_arr[i])
- {
- printf("%s\n", words_arr[i]);
- i ++;
- }
- }
- return 0;
- }
- // «адание 3. Split
- char **strplit(const char *str)
- {
- char **res = NULL, // результат
- *pin = (char *)str, // указатель на текущую позицию чтени€
- *word, // указатель на новое выходное слово
- *tmp; // вспомогательный указатель дл€ копировани€ слова
- int word_count, cur_len, i, is_end;
- word_count = cur_len = is_end = 0;
- // выпол€нем до конца входной строки
- while (1)
- {
- if (*pin != ' ' && *pin != '\0') // если не пробел и не конец строки
- cur_len ++; // увеличиваем длину очередного слова
- else if (cur_len > 0) // иначе, если в очередном слове есть хоть один символ
- {
- // выдел€ем пам€ть под новое слово
- word = (char *)malloc((cur_len + 1) * sizeof(char));
- if (word == NULL)
- return NULL;
- // устанавливаем указатель на начало слова
- tmp = pin - cur_len;
- // копируем слово в новую строка
- for (i = 0; i < cur_len; i ++)
- word[i] = tmp[i];
- // не забываем символ конца строки
- word[cur_len] = '\0';
- // обнул€ем длину текущего слова
- cur_len = 0;
- // выдел€ем пам€ть под указатель на новую строку
- word_count ++;
- res = (char **)realloc(res, (word_count + 1) * sizeof(char *));
- if (res == NULL)
- return NULL;
- res[word_count - 1] = word; // запоминаем указатель на полученное слово
- res[word_count] = NULL; // обнул€ем последний указатель
- }
- // переходим к следующему символу
- if (*pin != '\0')
- pin ++;
- else
- return res;
- }
- }
Add Comment
Please, Sign In to add comment