コード例 #1
0
//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; //âîçâðàùàåì ðåçóëüòàò.
}
コード例 #2
0
ファイル: String.c プロジェクト: qyh/studio
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;
}