Top.Mail.Ru
Ответы

Написать код на С.

Задание: Написать функцию, определяющую позицию начала в строке 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...

Аватар пользователя
Ученик

Спасибо большое!



Видео по теме