Написать код на С.
Задание: Написать функцию, определяющую позицию начала в строке s слова с номером n.
По дате
По рейтингу
12345678910111213141516171819
#include <stdio.h>
int position(const char* line, int n) {
int i = 0;
int m = 0;
while (line[i] && line[i] == ' ') ++i;
while (line[i]) {
if (++m == n) return i;
while (line[i] && line[i] != ' ') ++i;
while (line[i] && line[i] == ' ') ++i;
}
return -1;
}
int main(void) {
char line[] = "to be or not to be";
int index = position(line, 5);
printf("line: %s\n", line);
printf("index: %i\n", index);
return 0;
} Спасибо большое!
А можете написать с употреблением strlen?
1234567891011121314151617181920212223
#include <stdio.h>
#include <string.h>
int WordIndex(char* s, unsigned short n);
int main()
{
char s[100];
fgets(s, 99, stdin);
printf("\n%d", WordIndex(s, 4));
return 0;
}
int WordIndex(char* s, unsigned short n)
{
const char* ptr = NULL;
while (n--)
{
ptr = strtok(ptr?NULL:s, " ,!.-;?");
if (!ptr) return -1;
}
return ptr - s;
} Исправил код из того примера.
Используется strtok. При каждом вызове он указывает на следующий символ, не являющийся разделителями во втором аргументе. Запускаем цикл на поиск нужного по порядку слова. Если он не дойдя до конца вернет NULL значит слова закончились и функция возвращает -1. Иначе возвращает дистанцию между указателем на найденное слово и началом строки.
И все равно вышло без strlen...
Спасибо большое!
Видео по теме