Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
1

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

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

Author24 — интернет-сервис помощи студентам
Друзья, все вроде как работает, но хотелось бы услышать советы по оптимизации и придаче красоты коду
функциями ( а таковая в си имеется готовая) нельзя пользовать даже 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2017, 05:30
Ответы с готовыми решениями:

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

В поле "Фамилия" убрать начальные и конечные пробелы и знаки табуляции
Доброго времени суток! Нужно почистить БД. В поле &quot;Фамилия&quot; убрать начальные и конечные пробелы и...

Функция, которая удаляет начальные и конечные пробелы из строки
Написать функцию, которая удаляет начальные и конечные пробелы из строки, полученной в качестве...

Описать процедуру Trim(S), удаляющую в строке S начальные и конечные пробелы
нужно решить задачу до завтра, помагите пожалуйста! Задача: Описать процедуру Trim(S), удаляющую...

6
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
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
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
24.09.2017, 17:44  [ТС] 3
не могу понять почему то с цифрами барахлит код,
так строку '\t\t555\t\t' он всеравно выводит с табуляциями на выходе. странно.
а насчет препинания, обьясните в двух словах как обработать данное событие
0
838 / 641 / 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
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
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
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
2 / 2 / 0
Регистрация: 10.05.2011
Сообщений: 50
25.09.2017, 23:14 7
/del
0
25.09.2017, 23:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2017, 23:14
Помогаю со студенческими работами здесь

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

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

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

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

Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на преобразованную строку
Дали задание в ВУЗе. Назначение программы: Функция alltrim удаляет из строки начальные и конечные...

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


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

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