Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 06.11.2022
Сообщений: 28
1

Как заменить "tab" на символ "^|"?

08.11.2022, 16:13. Показов 1591. Ответов 20

Author24 — интернет-сервис помощи студентам
есть у меня текстовый файл с которого я должен считать в буффер все содержимое и заменить табы на символ '^|' и вывести буффер. файл не должен меняться! как это реализовать - без понятия
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2022, 16:13
Ответы с готовыми решениями:

Как заменить символ-заполнитель на любой символ?
Как заменить символ-заполнитель на любой символ? Например: printf("%05d", a) здесь...

Как заменить символ "Tab" в начале абзаца на пробелы?
помогите решить задачу: как заменить символ "Tab" в начале абзаца на пробелы? str = ...

как можно заменить TAB на Enter?
как можно заменить TAB на Enter, я хочу чтоб при нажатие Enter курсор двигался по полям

Символ переноса в Excel (Как заменить символ на перенос строки)
Решил подсобить всем кто будет гуглить: Как заменить символ на перенос строки в Excel (ALT+Enter)....

Есть строка (S), как в ней заменить символ (a) на символ (b)
Есть строка (S), как в ней заменить символ (a) на символ (b)?

20
Злостный нарушитель
9450 / 5101 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
08.11.2022, 18:06 2
Цитата Сообщение от Kuttubek Посмотреть сообщение
заменить табы на символ '^|'
А это не два символа?
0
1 / 1 / 0
Регистрация: 06.11.2022
Сообщений: 28
08.11.2022, 18:17  [ТС] 3
Verevkin, можно через принтф
типо
"
if (str[i] == '\t'){
str[i] = "^|";
}
"
но я должен перебирать массив (буффер) посимвольно
0
Злостный нарушитель
9450 / 5101 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
08.11.2022, 18:22 4
Цитата Сообщение от Kuttubek Посмотреть сообщение
str[i] = "^|";
Это не соответствует тексту задачи.
Не "^l", а '^l'.
Я поэтому и спросил.
0
1 / 1 / 0
Регистрация: 06.11.2022
Сообщений: 28
08.11.2022, 19:43  [ТС] 5
Verevkin, тогда наверное вот так:
if(str[i] == '\t'){
printf("^|");
printf("%s", str[i]);
}
если символ равно '\t' (табуляции) то вместо таба выводить '^|'
0
Злостный нарушитель
9450 / 5101 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
08.11.2022, 19:55 6
Цитата Сообщение от Kuttubek Посмотреть сообщение
если символ равно '\t' (табуляции) то вместо таба выводить '^|'
А какой код у символа '^|'? В каком языке программированич он так обозначается?
0
из племени тумба-юбма
2480 / 1802 / 418
Регистрация: 29.11.2015
Сообщений: 8,739
Записей в блоге: 15
08.11.2022, 20:17 7
Да, тут зависит от кодировки вашей ОС, я так думаю. У кого то это действительно '\t' , а может быть и другой символ.
Хотя как он может так быть, тоже не понимаю.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
08.11.2022, 20:19 8
Хозяйке на заметку: в Паскале литера ^I - он же #9 - символ с кодом 9, он же '\t' в Си.
Но в Си "^I" это не один символ, а два, то есть задание все еще содержит противоречие.
0
2478 / 1082 / 484
Регистрация: 17.11.2018
Сообщений: 2,763
08.11.2022, 20:35 9
Цитата Сообщение от Verevkin Посмотреть сообщение
Это не соответствует тексту задачи.
Почему?
Цитата Сообщение от Kuttubek Посмотреть сообщение
Как заменить "tab" на символ "^|"?
0
1 / 1 / 0
Регистрация: 06.11.2022
Сообщений: 28
08.11.2022, 20:36  [ТС] 10
Verevkin,
cat -t filename предполагает и -v также отображает табы как ^I
Мне нужно реализовать флаг -t и -v в си
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
08.11.2022, 20:44 11
analogov net,
Не соответствует в том, что в Си "^I" это не символ (как в условии), а символы (два, а не один).

Добавлено через 3 минуты
Kuttubek,
ищете в строке '\t'
не нашли - выводите строку целиком
иначе, выводите до '\t', выводите "^I", указатель строки на след.символ
повторить
0
Злостный нарушитель
9450 / 5101 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
08.11.2022, 20:55 12
Цитата Сообщение от analogov net Посмотреть сообщение
Почему?
По кочану.
И по капусте.

Как заменить "tab" на символ "^|"?
0
2478 / 1082 / 484
Регистрация: 17.11.2018
Сообщений: 2,763
08.11.2022, 21:38 13
Verevkin, а если бы он написал в названии темы так:
Цитата Сообщение от Kuttubek Посмотреть сообщение
Как заменить "tab" на "^|"?
было бы нормально? А может ТС не знает каким словом это "^|" назвать и назвал это "^|"
символом? В чём проблема?

Добавлено через 2 минуты
Тем более, вот же он написал:
Цитата Сообщение от Kuttubek Посмотреть сообщение
Verevkin, можно через принтф
0
Злостный нарушитель
9450 / 5101 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
08.11.2022, 21:40 14
Цитата Сообщение от analogov net Посмотреть сообщение
было бы нормально?
Я бы это понял так:
на входе: "aaabbbtabccc";
на выходе: "aaabbb^lccc".
Но он написал
Цитата Сообщение от Kuttubek Посмотреть сообщение
табы на символ
Я поэтому начал задавать уточняющие вопросы. Разве это не нормально?
0
2478 / 1082 / 484
Регистрация: 17.11.2018
Сообщений: 2,763
08.11.2022, 21:42 15
Verevkin, я там, выше, дописал...
0
Злостный нарушитель
9450 / 5101 / 1165
Регистрация: 12.03.2015
Сообщений: 24,042
08.11.2022, 21:46 16
Цитата Сообщение от analogov net Посмотреть сообщение
я там, выше, дописал...
Мой интерес иссяк, пойду спать.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7788 / 4613 / 2828
Регистрация: 22.11.2013
Сообщений: 13,111
Записей в блоге: 1
08.11.2022, 21:51 17
Хозяйке на заметку: так то там не только табы заменять надо, а (псевдокод)
C
1
2
3
4
if (*s<32)
  printf("^%c",*s+'@');
else
  printf("%c",*s);
0
2478 / 1082 / 484
Регистрация: 17.11.2018
Сообщений: 2,763
09.11.2022, 03:50 18
Лучший ответ Сообщение было отмечено Kuttubek как решение

Решение

Kuttubek, так попробуй:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    FILE* file = fopen( "3.txt", "rt" );
    char buf[BUFSIZ] = "", *p = buf;
 
    do
        if( ( *p = fgetc( file ) ) == '\t' )
            strncpy( p++, "^|", 2 );
    while( *p++ != EOF );
 
    fclose( file );
    printf( "%s\n", buf );
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 06.11.2022
Сообщений: 28
09.11.2022, 16:07  [ТС] 19
analogov net, Спасибо работает. Но я еще сделал свою версию
код:
C
1
2
3
4
5
6
7
8
9
10
11
            while ((ch = fgetc(f)) != EOF)
            {
                if (ch == '\t')
                {
                    printf("^|");
                }
                else
                {
                    printf("%c", ch);
                }
            }

и то и другое работает
0
2478 / 1082 / 484
Регистрация: 17.11.2018
Сообщений: 2,763
09.11.2022, 16:13 20
А где это условие?
Цитата Сообщение от Kuttubek Посмотреть сообщение
я должен считать в буффер все содержимое и заменить табы на символ '^|' и вывести буффер.
0
09.11.2022, 16:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2022, 16:13
Помогаю со студенческими работами здесь

Как заменить символ . (точки) на символ / (right слэш)?
Доброго времени суток! думаю это уже было, но найти не смог. Как заменить символ ....

Если символ Д встречается в массиве чаще чем символ к то заменить его на символ +
Помогите пожалуйста написать задачу Если символ Д встречается в массиве чаще чем символ к то...

Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_»
День добрый. Имеется условие лабы. Написать программу, в которой с клавиатуры вводится до 10...

Как в каждую строку(130 000 строк) txt-файла добавить символ табуляции (TAB) после первого значимого пробела (SPACE)?
Как в каждую строку большого(130 000 строк) txt-файла добавить символ табуляции (TAB) после первого...

Sheets Tab= new Sheets ('Test'); Tab.addCol('id',int); Tab.addCol('Text',String); Tab.addVal('id',4);
Вопрос: Можно реализовать в JAVA механизм такого вида. Примерно так Sheets Tab= new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru