Разбор строки на слова

C (programming language)

В данном примере, разделения строки на отдельные слова осуществляется определением места положения пробелов. Предполагается, что символы, расположенные между пробелами, составляют отдельное слово.
Извлечение последовательности символов начинаем с поиска пробела. Функция strchr возвращает указатель на первое вхождение пробела. Разница между найденным указателем и указателем на начало строки составит длину первого слова.
Выделение первого слова
Приравниваем значение указателя end + 1 к указателю start, тем самым позиционируя начало поиска на новую позицию, пропуская найденный пробел.
Выделение следующего слова
Выполняем выделение всех последующих слов до последнего. Последнее слово не оканчивается пробелом, поэтому выделяем все символы до конца строки.


#include <stdio.h>
#include <string.h>

/**
 * Функция выполняет разделение строки на слова.
 *	- указатель на исходную строку.
 * Возвращаемое значение:
 *	нет.
 */
void parse_string(const char *str);

/* Основная функция */
int main()
{
	const char *str = "Kazakhstan has presented its tourism opportunities at an international tourism exhibition in Moscow recently.";

	parse_string(str);

	return 0;
}

void parse_string(const char * str)
{
	if (!strlen(str))
		return;

	char word[64] = { 0 };

	const char *start = str;	/* Указатель на начало слова. */
	const char *end = nullptr;	/* Указатель на конец слова. */
	int number_of_words = 0;
	do
	{
		end = strchr(start, ' '); /* Ищем первое вхождение пробела. */
		if (end)
		{
			if ((end - start) > 1) /* Разница между адресами определяет
								      количество символов в слове. */
			{
				/* Копируем символы из промежутка определенного указателями. */
				strncpy_s(word, end - start + 1, start, end - start);
				printf("%2d - %s\n", ++number_of_words, word);
			}
			/* Перемещаем начальный указатель на еще не обработанный участок строки. */
			start = end + 1;
		}
		else
		{
			/* Последнее слово не оканчивается пробелом, поэтому копируем все
			   символы до конца строки. */
			strncpy_s(word, strlen(start) + 1, start, strlen(start));
			printf("%2d - %s\n", ++number_of_words, word);
		}
	} while (end);
}

1С:Предприятие

Самый большой опыт работы был накоплен при внедрении программных продуктов от компании "1С".
Подробнее...

PALO

Этот продукт мы включили специально для тех заказчиков, которые решили организовать финансовый учет, на своем предприятии, либо ведут его в таблицах MS Excel.
Подробнее...

Профессионалам

Информационные материалы содержащие справочную информацию или полезные сведения для повышения квалификации.
Подробнее...