Как очистить строку в си

от admin

Erase the current printed console line

I want to print bye on the same line in place of hello.

14 Answers 14

You can use VT100 escape codes. Most terminals, including xterm, are VT100 aware. For erasing a line, this is ^[[2K . In C this gives:

qq4's user avatar

Some worthwhile subtleties.

\33[2K erases the entire line your cursor is currently on

\033[A moves your cursor up one line, but in the same column i.e. not to the start of the line

\r brings your cursor to the beginning of the line (r is for carriage return N.B. carriage returns do not include a newline so cursor remains on the same line) but does not erase anything

In xterm specifically, I tried the replies mentioned above and the only way I found to erase the line and start again at the beginning is the sequence (from the comment above posted by @Stephan202 as well as @vlp and @mantal) \33[2K\r

On an implementation note, to get it to work properly for example in a countdown scenario since I wasn’t using a new line character ‘\n’ at the end of each fprintf() , so I had to fflush() the stream each time (to give you some context, I started xterm using a fork on a linux machine without redirecting stdout, I was just writing to the buffered FILE pointer fdfile with a non-blocking file descriptor I had sitting on the pseudo terminal address which in my case was /dev/pts/21 ):

Note that I used both the \33[2K sequence to erase the line followed by the \r carriage return sequence to reposition the cursor at the beginning of the line. I had to fflush() after each fprintf() because I don’t have a new line character at the end ‘\n’ . The same result without needing fflush() would require the additional sequence to go up a line:

Note that if you have something on the line immediately above the line you want to write on, it will get over-written with the first fprintf(). You would have to leave an extra line above to allow for the first movement up one line:

Правильный способ очистить C-строку

Мне интересно, каким будет правильный способ очистить строку в C. Будет ли это так?

4 ответов

Это зависит от того, что вы подразумеваете под «пустым». Если вы просто хотите строку нулевой длины, то ваш пример будет работать.

Это также будет работать:

Если вы хотите обнулить все содержимое строки, вы можете сделать это так:

но это будет работать только для обнуления до первого нулевого символа.

если строка является статическим массивом, вы можете использовать:

два других способа strcpy(str, «»); и string[0] = 0

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

Если вы хотите очистить динамический выделенный массив символов с самого начала, вы можете использовать комбинацию malloc () и memset() или — и это намного быстрее-calloc (), который делает то же самое, что и malloc, но инициализирует весь массив с нулем.

наконец — то я хочу, чтобы вы имели в виду свою среду выполнения. Более того, если вы обрабатываете огромные массивы (6 цифр и выше), вы должны попытаться установить первое значение в Null вместо запуска memset() через всю строку.

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

надеюсь, это было полезно для всех;)

зависит от того, что вы подразумеваете под опорожнять. Если вы просто хотите пустую строку, вы можете сделать

Если вы хотите установить каждый элемент в ноль, сделайте

требуется имя строки и ее длина будет ноль всех символов другие методы могут остановиться на первом нуле, с которым они сталкиваются

Методы-модификаторы строки

Класс string содержит большое количество функций-членов (методов) для изменения строки. Этих функций гораздо больше, чем в других контейнерах. Объясняется это тем, что данные методы обеспечивают тот необходимый функционал, который соответствует функционалу для работы с C-строкой. Эти методы, в совокупности, называются модификаторами, так как они изменяют символьный массив различным образом. С точки зрения эффективности, эти методы могут влиять на производительность программы негативно, так как в результате может произойти прераспределение памяти (см. предыдущий урок). Нужно тщательно взвесить, стоит ли использовать в своей программе тот или иной метод. Например, в задаче 19.8 мы использовали временную строку для получения результата. Однако, если использовать, для решения задачи метод insert() , применяемый к исходной строке, то вы бы получили чрезвычайно медленно работающую программу (на каждом шаге цикла происходило бы смещение элементов с копированием новых, а это не эффективно). Рассмотреть всё разнообразие работы с этими методами, в рамках нашего курса, не представляется возможном.

Читать:
Как преобразовать индексированные цвета в rgb
replace

Этот модификатор заменяет в исходной строке подстроку строкой или указанным диапазоном. Подстрока замены не обязательно должна иметь тот же размер, что и заменяемая подстрока.
1. Замена подстроки, указанную диапазоном [pos, pos + count) , на строку other_str ( other_str может быть как объектом класса string , так и C-строкой):

или с указанием диапазона из other_str

2. Подстроку для замены можно получить и с помощью итераторов:

3. Наконец, можно заменить count символами ch :

Программа 8 В заданной строке поменять местами первое и последнее слово строки. Разделителями слов считаются пробелы.

Русские Блоги

Как очистить определенную строку консоли и использование символа ‘\ b’ в языке C

Предисловие

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

Используйте escape-символ ‘/ r’ для достижения определенного обновления или очистки покрытия строки

‘\ r’ — это разновидность языка Си Переместить текущую позицию в начало этой строки Управляющий символ, его символьное значение — возврат каретки. При его использовании нам нужно использовать функцию printf для его вывода.

Ниже приводится конкретный подход.
1. Выведите в консоль строку информации: printf («Первый вывод в это время . »);
2. Используйте управляющие символы, чтобы очистить выводимую информацию: printf ("\ r");
3. Выведите следующую информацию: printf («В это время второй тайм закончился . »);
Примечание. После выполнения первого шага перед выполнением второго шага проходит немного времени, иначе предыдущий вывод не будет виден из-за слишком быстрого обновления.

Образец кода

Описание

Фактически, он не очищает напрямую информацию определенной строки, а перемещает позицию курсора в начало строки. В этом случае новая информация вывода консоли будет перезаписывать предыдущую информацию, чтобы достичь функции обновления вывода в той же строке. . Но следует отметить, что когда длина новой выходной информации меньше, чем предыдущая информация, предыдущая информация не будет полностью покрыта. (Просто скажи, что останется маленький хвостик) , Затем его можно перезаписать, выведя пустые символы

Некоторые люди думают, что перезапись и обновление строки недостаточно, говоря, что они хотят обновить только последний символ этой строки, и спрашивают, есть ли способ.
Ответ — да!

Функция и использование символа возврата ‘\ b’

‘\ b’ — это то же самое, что и вышеупомянутый ‘\ r’, которые являются символами передачи, предоставляемыми языком C. В отличие от ‘\ r’, функция ‘\ b’ Переместить текущую позицию на один символ назад , Его символьное значение — backspace. Вам также необходимо использовать функцию printf для вывода.

Использование и недопонимание
1. Вернуть один символ назад

2. Возврат нескольких символов

подводить итоги

Оба escape-символа ‘\ r’ и ‘\ b’ Осознайте движение курсора, тем самым изменив выходное положение консоли. Хотя они не могут напрямую очистить строку или часть информации, мы можем перезаписать предыдущую информацию пустыми символами, чтобы добиться эффекта очистки информации визуально. Помимо очистки информации они также могут Осуществить обновление наложения И другие функции.

Интеллектуальная рекомендация

Меч относится к предложению + 43: количество N сиша + Java

Оригинальное название: бросить кубики на землю, все точки кости сталкиваются с точкой точки кости. Введите n, напечатали вероятность всех возможных значений. (6 сторон каждой кости, точки от 1 до 6) Р.

Введение в Python 4

функция ввода Использование функции Функция input () является функцией ввода. Функция input () — это функция ввода. Когда вы пишете вопрос в скобках функции, функция input () будет отображать вопрос в.

Основные операции в R 01

Повторите основную операцию секретной книги ниндзя языка R учителя Се Иихуэй.

Мастерство, создание американской легенды очистки воды

Мастера — это не только технические специалисты и квалифицированные мастера, которые могут решить некоторые практические проблемы в производстве и жизни, но также авангарды, которые могут руководить п.

курсы памяти Лу Feifei (а, понимать память понимания мозга)

Понимание памяти, что память? Понимание памяти, что память? 1 Понимание мозга 2 Что такое память Функция 3 Память 3.1 общие воспоминания путь 3.2 Факторы, влияющие на память 4 запоминающий материал Че.

Похожие статьи