//Split into words. //By spaces. wlist splitter(char* string) //ñïëèòèò ñòðîêó ïî ïðîáåëàì. { wlist result; //îáúÿâèëè ðåçóëüòàò result.words = (char**)malloc(10 * sizeof(char*)); //âûäåëèëè ÷óòü ÷óòü ïàìÿòè (10 ñëîâ) int start = 0, end = 0; //èíäåêñû ïåðâîãî è ïîñëåäíåãî íåïðîáåëà. result.count = 0; //óñòàíàâëèâàåì êîëè÷åñòâî ñëîâ â ñëîâàðå â 0 result.cap = 10; //à åãî âìåñòèìîñòü â 10 while (string[start] != '\0' && string[end] != '\0') //Ïîêà ñòðîêà íå êîí÷èòñÿ. { while (string[start] != '\0' && string[start++] == ' '); //ïîêà ñèìâîë - ïðîáåë äâèãàåì èíäåêñ end = start; //ïðèðàâíèâàåì êîíåö ê íà÷àëó. start--;//âû÷èòàåì 1 èç-çà ïîñòôèêñíîãî îïåðàöèè ++ while (string[end] != '\0' && string[end++] != ' '); //ïîêà íå ïðîáåë äâèãàåì èíäåêñ êîíöà ñëîâà. end--; //âû÷èòàåì. ïî òåì æå ñîîáðàæåíèÿì ÷òî è âûøå. if (result.count + 1 > result.cap) //åñëè â ñëîâàðå íåò ìåñòà íà åùå 1 ñëîâî { result.words = (char**)realloc(result.words, result.cap * 2 * sizeof(char*)); //âûäåëÿåì äëÿ íåãî â 2 ðàçà áîëüøå ìåñòà. result.cap = result.cap * 2; //óâåëè÷èâàåì ñîîòâåòñòâóþùóþ ïåðåìåííóþ } result.words[result.count++] = chars_cpy(string, start, end); //êîïèðóåì ñèìâîëû íà÷èíàÿ ñ íà÷àëà ñëîâà è äî åãî êîíöà. start = end + 1; //ñìåùàåì ñòàðò íà ñëåäóþùèé ïîñëå êîíöà ñëîâà ñèìâîë. } //printf("%d",result.count); íåíóæîí. return result; //âîçâðàùàåì ðåçóëüòàò. }
int chars_insert(chars p, const char *str, size_t index) { chars prefix = NULL; chars suffix = NULL; if (index > p->length) { return chars_append(p, str); } else if (index < 0) { fprintf(stderr, "index must be elevatedzero range\n"); return -1; } chars_init(&prefix, p->length + 1); chars_init(&suffix, p->length - index + 1); chars_nappend(prefix, p->s, index); chars_append(prefix, str); chars_cut(p, index, p->length - index); chars_nappend(suffix, p->s, p->length); chars_cpy(p, prefix->s); chars_append(p, suffix->s); chars_free(&prefix); chars_free(&suffix); return 0; }