Определить порядковый номер слова в строке - C (СИ)
Формулировка задачи:
Решение задачи: «Определить порядковый номер слова в строке»
#include <stdio.h>
#include <glib.h>
#define DELIM " \t\n"
typedef char string_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
#define get_word(w) ( scanf("%255s%*c", (w)) == 1 )
int main(void) {
string_t str, wrd;
while ( printf("String: ") && get_string(str) && printf("Word: ") && get_word(wrd) ) {
char ** words = g_strsplit_set(str, DELIM, -1), ** pWord;
int wordNumber = 0;
for ( pWord = words; *pWord; ++pWord ) {
if ( ! **pWord )
continue;
++wordNumber;
if ( g_str_equal(*pWord, wrd) )
break;
}
if ( *pWord )
printf("#%d\n", wordNumber);
else
printf("Not found.\n");
g_strfreev(words);
}
return 0;
}
Объяснение кода листинга программы
В этом коде определен тип данных string_t как массив символов фиксированного размера (256 символов). Затем определены две функции get_string и get_word, которые считывают строку и слово из стандартного ввода соответственно.
В основном цикле программы, пока пользователь вводит строки и слова, код разбивает строку на слова с помощью g_strsplit_set, а затем ищет каждое слово в строке. Если слово найдено, функция printf выводит порядковый номер слова в строке. Если слово не найдено, выводится сообщение Not found.
Переменные str и wrd используются для хранения текущей строки и текущего слова соответственно.
В конце программы вызывается функция g_strfreev для освобождения памяти, выделенной для слов в строке.
В этом коде нет использования переменных h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.