Форум программистов, компьютерный форум CyberForum.ru

Удаление лишних пробелов в начале и конце строки. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ программа четырехзначное число http://www.cyberforum.ru/cpp-beginners/thread24937.html
Программу в C++ Дано четырехзначное число х. Нужно вывести на экран сообщение о том, сколько в этом числе одинаковых цифр и каково их значение
C++ Как возвратить одномерный массив Есть вопрос. Можно ли возвратить из одной функции в другую, ее вызвавшую, не просто одно значение, а массив значений через return? void main() { ... func(A); } int func(int *S) { .... return A; /*Или что-то в этом роде*/ http://www.cyberforum.ru/cpp-beginners/thread24930.html
C++ API функции для работы с окном
Подскажите, пожалуйста, есть ли API функции в с++, с помощью которых можно закрывать, разворачивать, сворачивать, перемещать и т.п. окно ? Если есть, напишите их или дайте ссылку на источник.
C++ Принадлежность точки к отрезку.
УВАЖАЕМЫЕ ЭКСПЕРТЫ ПОМОГИТЕ УЛУЧшИТЬ АЛГОРИТМ ДЛЯ ДАННОЙ ЗАДАЧИ.... Точки и отрезки (Время: 2 сек) Дано N отрезков на числовой прямой и M точек на этой же прямой. Для каждой из данных точек определите, скольким отрезкам она принадлежит. Точка x считается принадлежащей отрезку с концами a и b, если выполняется двойное неравенство min(a, b) <= x <= max(a, b). Входные данные Первая строка...
C++ Обьём целиндра + 10 r,h, значений и 10 выводов. http://www.cyberforum.ru/cpp-beginners/thread24849.html
Здравствуйте все, прошу прощения если такая тему уже было но найти не могу. Суть в чём, Написать программу которая посчитала бы обьём целиндра И вы водила, его с помощью ФУНКЦИИ (я так понимаю передача данных методом копирования или по ссылке) Я то написал программу, но я меня не было тогда когда была лекция про эти методы, в книгах понять не могу как это делается, собвственно как вывести...
C++ Создание матрицы 5*3 в С++ Добрый день а может вечер, здрасте всем... Прошу помощь мне с задачей если не составит труда вот условие задачи 8.9 Результаты соревнований по прыжкам в длину представлены в виде матрицы 5х3 (5 спортсменов по 3 попытки у каждого). Указать, какой спортсмен и в какой попытке показал наилучший результат. Спасибо всем... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
14.08.2009, 12:46     Удаление лишних пробелов в начале и конце строки.
Выкладываю то что у меня получилось...
Исходный текст содержится в текстовике, подстрока находится между словами в тексте begin и end. Если этих слов в текстовике нето, то подстрока не извлекается. Привожу также результат работы и текстовики (их названия говорят сами за себя)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
 
//Возвращает подстроку из chBuf 
//sLeft  - указатель на 0-й элемент подстроки в строке chBuf
//sRight - указатель на последний элемент подстроки в строке chBuf
 
//Поясняю
//chBuf = "123456aa789";
//Допустим надо вернуть аа
//sLeft = strchr(chBuf,'a');
//sRight= strrchr(chBuf,'a');
//Это всего лиш пример
//sLeft можно задать как aa789 а sRight как a789
char * GetMidStr(LPCTSTR chBuf, char * sLeft, char * sRight);
 
//Чистка пробелов
char * TrimSpace(char * str);
 
//Для выбора файла с текстом
LPTSTR SelectFile();
 
char * str = (char *)malloc(sizeof(char));
 
FILE *f;
 
void main()
{
    int sLen = 0;
    char * sLeft, * sRight, * chBuf;
    char sPath[MAX_PATH];sPath[0] = '\0';
    if(sprintf(sPath,SelectFile()))
    {
        if((f = fopen(sPath,"rb+")))
        {
            fseek(f,0,SEEK_END);
            sLen = ftell(f);
            fseek(f,0,SEEK_SET);
            str = (char *)realloc(str,sLen);
            //считываем строку для анализа
            fread(str,1,sLen,f);
            str[sLen - 1] = '\0';
            fclose(f);
            printf("INPUT str : %s\r\n",str);
            sLen = (int)(&str[0]);//Запоминаем начало строки
            //верней запоминаем адресс начала
            //нужно чтоб realloc потом сработал!!!!
            str = TrimSpace(str);
            printf("TRIMS str : %s\r\n",str);
            //Допустим нам нужна подстрока которая начинается
            //со слова begin и оканчивается словом end
            //одновременно проверим есть ли такая подстрока вообще
            sLeft = strstr(str,"begin");
            sRight = strstr(str,"end");
            if(!sLeft)
                printf("str isn't contain word [begin]\r\n");
            else
            {
                if(!sRight)
                    printf("str isn't contain word [end]\r\n");
                else
                {
                    chBuf = GetMidStr((LPCTSTR) str, sLeft, sRight);
                    printf("SUBSTRING : %s\r\n",chBuf + strlen("begin"));
                    //Тут чёт free выделывается, даж сам не пойму((((
                    //free(chBuf);
                }
            }
            str -= ((int)&str[0] - sLen);
            str = (char *)realloc(str,sizeof(char));
        }
    }
    printf("Enter NUM1 to choose next file with text\r\n");
    scanf("%d",&sLen);
    if(sLen == 1)
        main();
}
 
char * GetMidStr(LPCTSTR chBuf, char * sLeft, char * sRight)
{
    char * RetVal;
    int sLen = chBuf != NULL ? strlen(chBuf) : -1;
    if(0 < sLen)
    {
        RetVal = (char *)malloc((sLen + 1)*sizeof(char));
        sprintf(RetVal,"%s",chBuf);
        if(*sLeft && *sRight)
        {
            RetVal = strstr(RetVal,sLeft);
            if(RetVal)
            {
                sLen = strlen(sLeft) - strlen(sRight);
                if(0 < sLen)
                    RetVal[strlen(RetVal) - strlen(sRight)] = '\0';
            }
        }
    }
    return RetVal;
    //После использования в проге 
    //обязательно надо предусмотреть чистку памяти!!!!
    //Вот вариант реализации чистки
    //char * someStr = GetMidStr(...);
    //if(someStr)
    //   free(someStr);
}
 
//Думаю так наиболее просто обрезать пробелы
char * TrimSpace(char * str)
{
    char * chBuf = strrchr(str,' ');
    if(chBuf)
        str[strlen(str) - strlen(chBuf) - 1] = '\0';
    if(str)
        while(str[0] == ' ')
            str++;
    return str;
}
 
LPTSTR SelectFile()
{
    char sPath[MAX_PATH];sPath[0] = '\0';
    LPCITEMIDLIST lpItemDList;
    BROWSEINFO bi = {NULL, NULL, sPath,
       "Выберите файл для обработки",
        BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
        NULL,
        NULL,
        0
    };
    if((lpItemDList=SHBrowseForFolder(&bi)))
    {
        if(SHGetPathFromIDList(lpItemDList, sPath))
            GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
    }
    return &sPath[0];
}
Миниатюры
Удаление лишних пробелов в начале и конце строки.  
Вложения
Тип файла: txt begin_end.txt (62 байт, 21 просмотров)
Тип файла: txt no_begin.txt (56 байт, 18 просмотров)
Тип файла: txt no_end.txt (58 байт, 18 просмотров)
 
Текущее время: 15:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru