Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.4 kB
4
Indexable
Never
	struct Word {
		int length;
		char *word;
		Word() : word(0), length(0) {}
		~Word() {
			if (word) {
				delete word;
			}
		}

		void set(const char *startPos, int size) {
			word = new char[size + 1];
			memcpy(word, startPos, size);
			word[size] = '\0';
			length = size;
		}
	};

	const char *input = "    * * * * HHHH  ZZZZ";
	// Вычисляем кол-во слов.
	int words = 0;
	int length = strlen(input);
	for (int i = 0; i < length; ++i) {
		if (input[i] != ' ' && (i == 0 || input[i - 1] == ' ')) { // учитываем так же ситуации когда пробелов может быть несколько
			++words;
		}
	}

	if (words == 0) {
		return 0;
	}
	Word *res = new Word[words];
	int itRes = 0;

	const char *startPos = input;
	const char *spacePos = strchr(startPos, ' ');
	while (spacePos != 0) {		
		int size = spacePos - startPos;
		if (size > 0) {
			res[itRes++].set(startPos, size);
		}
		startPos = spacePos + 1;
		spacePos = strchr(startPos, ' ');
	}

	// Ситуация когда последнее слова не заканчивается пробелом
	if (itRes < words) {
		int size = length - (startPos - input);
		res[itRes++].set(startPos, size);
	}

	delete[] res; // чистим результат, в реальной проге куда-то его используешь