Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
WWH
4 / 4 / 2
Регистрация: 23.12.2016
Сообщений: 124
1

Замена пробелов на табы

24.06.2018, 00:07. Просмотров 282. Ответов 8
Метки нет (Все метки)

Написать программу, заменяющую подряд идущие пробелы табами.
Программа компилится, но когда я ее запускаю она выводет сообщение о дампе ядра.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Программа заменяет пробелы на табуляцию.
#include <stdio.h>
#define MAX 1000
 
int main(){
        char inputStr[MAX];
        char outputStr[MAX];
 
        int c = getchar();
 
        for(int i = 0; c != '\n'; i++){
                inputStr[i] = c;
                c = getchar();
        }
 
        for(int i = 0; c != '\0'; i++){
                if(inputStr[i] == ' ' && inputStr[i+1] == ' ' && inputStr[i+2] == ' ' && inputStr[i+3] == ' '){
                        outputStr[i] = '\t';
                        i += 4;
                }
                outputStr[i] = inputStr[i];
        }
 
        for(int j = 0; outputStr[j] != '\0'; j++){
                printf("%c", outputStr[j]);
 
        }  
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2018, 00:07
Ответы с готовыми решениями:

Замена двух пробелов на один
Люди,кто подскажет? В тексте необходимо что б приисходила замена двойного...

Замена нескольких пробелов на один
Пишу код. #include &lt;stdio.h&gt; /*копирование ввода, замена нескольких пробелов...

Замена стоящих подрят пробелов на один пробел
Доброй ночи. Начал изучать Си по книге Б.Керриган Д.Ритчи столкнулся с задачей:...

Ввод-вывод. Замена нескольких пробелов одним. Код и блок-схема прилагаются.
Учу С по Кернигану и Ричи. Упражнение 1-7. Напишите программу, которая копирует...

Замена каждой строки, состоящей из одного или нескольких пробелов, одним пробелом
Здесь я бы хотел обратить внимание на важный момент. Я просматривал различные...

8
Геомеханик
798 / 602 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
24.06.2018, 04:44 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#define MAX   1024
#define SPACE 4
 
int main(void){
    int  c, j, i;
    char s[MAX];
 
    i = 0;
    while(((c = getchar()) != EOF) && (c != '\n')){
        s[i++] = c;
 
        j = i - SPACE;
        if(j >= 0){
            while((j < i) && (s[j] == ' '))
                ++j;
        }
 
        if(j == i){
            i -= SPACE;
            s[i++] = '\t';
        }
    }
    s[i] = '\0';
 
    puts(s);
    getchar();
    return 0;
}
0
WWH
4 / 4 / 2
Регистрация: 23.12.2016
Сообщений: 124
24.06.2018, 11:08  [ТС] 3
Это конечно классно, но я хотел бы найти ошибку в своей программе.
0
ValeryS
Модератор
7446 / 5638 / 716
Регистрация: 14.02.2011
Сообщений: 19,206
Завершенные тесты: 1
24.06.2018, 11:52 4
Цитата Сообщение от WWH Посмотреть сообщение
i += 4;
C
1
i+=3
четвертый даст
Цитата Сообщение от WWH Посмотреть сообщение
i++
ну и для if другая ветка нужна
C
1
2
3
4
5
6
7
8
if(inputStr[i] == ' ' && inputStr[i+1] == ' ' && inputStr[i+2] == ' ' && inputStr[i+3] == ' '){
    outputStr[i] = '\t';
    i += 3;
     }
else
{
    outputStr[i] = inputStr[i];
}
0
D3m1an
149 / 121 / 57
Регистрация: 11.08.2016
Сообщений: 416
Завершенные тесты: 1
24.06.2018, 14:13 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//Программа заменяет пробелы на табуляцию.
#include <stdio.h>
#define MAX 1000
 
int main(){
        char inputStr[MAX] = {0};
        char outputStr[MAX] = {0};
 
        int c = getchar();
 
        for(int i = 0; c != '\n' && i < MAX; i++) //можно было выйти за рамки массива. контролируем i
        {
                inputStr[i] = c;
                c = getchar();
        }
        int io = 0;     //необходим личный индекс выводного массива 
        for(int i = 0; inputStr[i] != '\0' && i < MAX; i++, io++) //зачем было условие с переменной 'с'?
        {
            if(inputStr[i] == ' ' && inputStr[i+1] == ' ' && inputStr[i+2] == ' ' && inputStr[i+3] == ' ')
            {
                outputStr[io] = '\t';
                i += 3;     //4ый раз инкремент будет в цикле for
            }
            else   //записываем только если условие не было ИСТИНА
                outputStr[io] = inputStr[i];
        }
        for(int j = 0; outputStr[j] != '\0'; j++)
                printf("%c", outputStr[j]);
        
        return 0;  //нужно возвращать 0.
}
0
WWH
4 / 4 / 2
Регистрация: 23.12.2016
Сообщений: 124
24.06.2018, 20:10  [ТС] 6
Все еще пишет: Segmentation fault (core dumped).В чем может быть проблема? Программа ведь нормально компилится.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//Программа заменяет пробелы на табуляцию.
#include <stdio.h>
#define MAX 1000
 
int main(){
        char inputStr[MAX];
        char outputStr[MAX];
 
        int c = getchar();
 
        for(int i = 0; c != '\n'; i++){
                inputStr[i] = c;
                c = getchar();
        }
 
        for(int i = 0; c != '\0'; i++){
                if(inputStr[i] == ' ' && inputStr[i+1] == ' ' && inputStr[i+2] == ' ' && inputStr[i+3] == ' '){
                        outputStr[i] = '\t';
                        i += 3;
                }else{
                outputStr[i] = inputStr[i];
                }
        }
 
        for(int j = 0; outputStr[j] != '\0'; j++){
                printf("%c", outputStr[j]);
 
        }  
}
0
D3m1an
149 / 121 / 57
Регистрация: 11.08.2016
Сообщений: 416
Завершенные тесты: 1
24.06.2018, 20:14 7
WWH, лог в студию.
И мою версию попробуйте
1
WWH
4 / 4 / 2
Регистрация: 23.12.2016
Сообщений: 124
24.06.2018, 21:11  [ТС] 8
Попробовал, работает. Спасибо!
0
ValeryS
Модератор
7446 / 5638 / 716
Регистрация: 14.02.2011
Сообщений: 19,206
Завершенные тесты: 1
24.06.2018, 22:00 9
Цитата Сообщение от WWH Посмотреть сообщение
outputStr[i] = inputStr[i];
индексы должны быть разные
как D3m1an, показал
Цитата Сообщение от D3m1an Посмотреть сообщение
outputStr[io] = inputStr[i];
0
24.06.2018, 22:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2018, 22:00

Заменить строки из пробелов минимальным числом табуляций и пробелов
Правильно ли я понимаю, что если табуляция равна 5 пробелам, строка...

Visual C# Express 2010: сменить форматирование отступов с пробелов на табы
Подскажите как в Visual C# Express 2010 сменить форматирование отступов с...

замена пробелов
подскажите как пробелы заменить на &amp;nbsp? Ну вот например: &lt;?php $var =...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru