Можно ли получить Line() в C, начиная с данного индекса?

Функция getline сканирует всю строку ввода и сохраняет ее в заданном массиве символов. Предположим, я хочу использовать метод getline для сканирования ввода, начиная с заданного индекса. Как мне этого добиться?

Например, скажем, ввод: Привет, меня зовут Джон.

Я хочу, чтобы getline хранила только меня зовут Джон.

    char* cmd = NULL;
    size_t size = 0;

    getline(&cmd, &size, stdin); // code to get whole input line.

Спасибо

4 ответа

Решение

getline не имеет такой возможности. Тем не менее, он читает из входного потока по умолчанию, и есть много других функций, которые также читают из этого потока.

Одна из самых основных функций чтения getc(), Это читает один единственный символ. Итак, чтобы "заставить" getline начать чтение с N-го символа, используйте N раз getc как раз перед этим

// "skip" N characters - read N and forget them immediatelly
for(int i=0;i<N;++i)
    getc(); // remember: that's a READ, it can FAIL

getline( ... ); // remember: that's a READ, it can FAIL

Конечно, таким образом, все эти пропущенные символы теперь невозможно восстановить (ну, почти, но давайте пропустим это). Также этот метод не позволяет "двигаться назад". Вы можете пропустить только "вперед".

Если вам когда-либо понадобится оглянуться назад на какие-либо символы во входном потоке, вам понадобится какая-то буферизация. Чтение всего или части ввода в буфер, просмотр всего буфера (массива данных и т. Д.), Вырезание интересных частей из буфера, загрузка новых / следующих данных в буфер и т. Д. Буферы хороши!:)

Тем не менее, это чтение по одному иногда тоже нормально. Основным плюсом этого способа "пропуска" является то, что он вообще не использует никакой дополнительной памяти. Если объем пропускаемых данных составляет несколько килобайт / мегабайт /../ байт, тогда действительно расточительно собирать все эти данные в буфер, чтобы сразу же их выбросить.

Ты можешь использовать fscanf игнорировать фиксированное количество символов, указав размер и звездочку, например:

fgets(cin, "%*6[^\n]"); // Ignore the first six characters, or up to \n
getline(&cmd, &size, stdin); // Read the rest of your string

Звездочка в строке формата означает "читать и игнорировать". Шесть указывает количество символов для чтения (и игнорировать).

Используя функцию fgets, вы можете получить всю строку в качестве входных данных. После этого на основе нужной вам позиции вы можете получить это.

Например,

char arr1[20],arr[]="hi this is for testing";

strcpy(arr1,arr+10); // In this you can use the cmd for that.

Вы получите строку, что вам нужно.

Ответ будет НЕТ.

Вы не можете использовать getline() читать на основе вашего индекса. Вам просто нужно передать адрес вашего указателя буфера и адрес переменной размера. После прочтения строки вы можете проанализировать буфер и получить то, что вам нужно, на основе вашего индекса.

Другие вопросы по тегам