Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
SadiQ228
-17 / 11 / 7
Регистрация: 16.12.2016
Сообщений: 484
1

Убрать начальные и конечные пробелы и табуляции

24.09.2017, 05:30. Просмотров 357. Ответов 6
Метки нет (Все метки)

Друзья, все вроде как работает, но хотелось бы услышать советы по оптимизации и придаче красоты коду
функциями ( а таковая в си имеется готовая) нельзя пользовать даже strlen
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void clear(char str[]){
int i=0;
int y=MAX;
int go=0;
    if(str[i]==' '||str[i]=='\t'){                                   //отсекаемся спереди
        while(str[i]==' '||str[i]=='\t'){
            i++;
        }
    }
    while (!((str[y]>'a')&&(str[y]<'z'))||((str[y]>'A')&&(str[y]<'Z'))||((str[y]<'0')&&(str[y]>'9'))){  
        y--;                                  // отсекаемся сзади                      
    }
    y++;
    for(;i<=y; i++){
        if(i==y){
            str[go++]='\0';      
        }
        str[go]=str[i];             // копируемся от отсечки до отсечки
        go++;
    }
}
Добавлено через 21 минуту
проморгал бле, не работает с цифрами на конце, где ошибка не пойму
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2017, 05:30
Ответы с готовыми решениями:

Как из строки удалить начальные и конечные пробелы?
удалить начальные и конечные пробелы?? Добавлено через 1 час 52 минуты 6 секунд Как...

В массиве определить начальные и конечные индексы элементов
В массиве из 25 элементов определить начальные и конечные индексы элементов,составляющих...

Лишние пробелы и табуляции
доброго времени суток! преподаватель говорил о расхождении значений i и j, после которого формула...

Заменить символы табуляции на пробелы
Вот Напишите программу detab, которая бы заменяла символы табуляции во входном потоке...

Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно)
Прошу помощи и детального ( по возможности разбора полетов ) Программа выводит строки где больше...

6
Байт
Эксперт C
20645 / 13137 / 2769
Регистрация: 24.12.2010
Сообщений: 27,630
24.09.2017, 09:25 2
Цитата Сообщение от SadiQ228 Посмотреть сообщение
C
1
(str[y]<'0')&&(str[y]>'9')
C
1
(str[y]>='0')&&(str[y]<='9')
Добавлено через 1 минуту
SadiQ228, Но вы отсекаете также и знаки препинания. Зачем?
0
SadiQ228
-17 / 11 / 7
Регистрация: 16.12.2016
Сообщений: 484
24.09.2017, 17:44  [ТС] 3
не могу понять почему то с цифрами барахлит код,
так строку '\t\t555\t\t' он всеравно выводит с табуляциями на выходе. странно.
а насчет препинания, обьясните в двух словах как обработать данное событие
0
Геомеханик
805 / 608 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
24.09.2017, 18:26 4
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
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <ctype.h>
char* trim(char* s, int (*cmp)(int));
 
static int space_tab(int c){ return (c == ' ' || c == '\t'); }
 
int main(void){ 
    char s1[] = "\t\t 123 \t\t";
    char s2[] = "75COBOL3";
    char s3[] = "\n\n\t GAME OVER";
 
    puts( trim(s1, &space_tab) );
    puts( trim(s2, &isdigit) );
    puts( trim(s3, &isspace) );
    return 0;
}
 
char* trim(char* s, int (*cmp)(int)){
    char* t = s, *p = s;
 
    while(*s && (*cmp)(*s))
        ++s;
 
    if(p != s){
        while((*p++ = *s++) != '\0')
            ;
        s = --p;
    } else {
        while(*s)
            ++s;
    }
 
    if((s > t) && *t){
        for(--s; (s >= t) && (*cmp)(*s); --s)
            ;
        *++s = '\0';
    }
    return t;
}
0
SadiQ228
-17 / 11 / 7
Регистрация: 16.12.2016
Сообщений: 484
24.09.2017, 23:25  [ТС] 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
#include <stdio.h>
#define MAX 128
void clear (char str[]);
int main(){
    char str [MAX];
    gets(str);
    clear(str);
    printf("[%s] \n", str);
}
void clear(char str[]){
int i=0;
int y=MAX;
int go=0;
while (! (((str[i]>='a')&&(str[i]<='z')) || ((str[i]>='A')&&(str[i]<='Z')) || ((str[i]>='0')&&(str[i]<='9')))){
    i++;
}
while (! (((str[y]>='a')&&(str[y]<='z')) || ((str[y]>='A')&&(str[y]<='Z')) || ((str[y]>='0')&&(str[y]<='9')))){
    y--;  // минусует три раза и перескакивает на другую инструкцию
}
y++;
while(i!=y){
    str[go++]=str[i++];
}
str[go++]='\0';
}
0
Unloat777
2 / 2 / 0
Регистрация: 10.05.2011
Сообщений: 50
25.09.2017, 23:14 6
А я просто сообщу о функции isspace из стандартной библиотеки C, и функции isalnum, использование которых освобождает от уродливых конструкций вроде
C
1
 (((str[y]>='a')&&(str[y]<='z')) || ((str[y]>='A')&&(str[y]<='Z')) || ((str[y]>='0')&&(str[y]<='9')))
0
Unloat777
2 / 2 / 0
Регистрация: 10.05.2011
Сообщений: 50
25.09.2017, 23:14 7
/del
0
25.09.2017, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2017, 23:14

Во вводимом с клавиатуры тексте удалить все пробелы, знаки табуляции
Нужно написать программу, которая во вводимом с клавиатуры тексте удалит все пробелы, знаки...

Написать программу, в которой функция будет убирает все лишние пробелы и табуляции в строке
Помогите написать программу,в которой функция будет убирает все лишние пробелы и табуляции в строке.

Удалить символы в строке, стоящие на четных местах; удалить лишние пробелы и знаки табуляции в строке, заменив одним пробелом
Надо удалить символы в строке, стоящие на четных местах. И удалить лишние пробелы и знаки табуляции...


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

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

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