Имя: Пароль:
LIFE
 
OFF: Как присвоить пустое значение строке в c++ ?
, ,
0 Anton2016
 
07.08.15
13:55
строка - массив char
1 ДенисЧ
 
07.08.15
13:55
str[0]='\0';
2 Anton2016
 
07.08.15
13:55
спасибо
3 Anton2016
 
07.08.15
13:56
а NULL это то же что и '\0' или нет?
4 ДенисЧ
 
07.08.15
13:56
нет
5 H A D G E H O G s
 
07.08.15
13:57
(0) Боль. Страдание. Унижение.
6 Anton2016
 
07.08.15
13:58
memset(S, NULL, INTDMAXLENGTHOFSTRING);

это неправильно?
7 ДенисЧ
 
07.08.15
14:02
(6) правильно - в (1)
8 Anton2016
 
07.08.15
14:03
спасибо...
понятно...
придется переписывать...
9 Anton2016
 
07.08.15
14:05
а может функция возвращать массив char?
10 ДенисЧ
 
07.08.15
14:07
А кто ей может запретить?
11 Anton2016
 
07.08.15
14:09
в функции создать массив, выделить память, вернуть указатель на массив как результат функции?
12 mehfk
 
07.08.15
14:14
(1) А че не так?
str = 0;
13 Anton2016
 
07.08.15
14:14
не взлетит... тип не тот
14 mehfk
 
07.08.15
14:15
Это ты кому?
15 Anton2016
 
07.08.15
14:16
ВаМ
компилятор не пропустит... у меня этот OpenWatcom
16 mehfk
 
07.08.15
14:20
сделай указатель, а не массив.
17 Anton2016
 
07.08.15
14:24
пошел читать Шилдта...
18 mehfk
 
07.08.15
14:24
или так *str = 0;
19 ДенисЧ
 
07.08.15
14:24
(17) Лучше Страустрапа.
Шилдт он больше по шарпу
20 mehfk
 
07.08.15
14:24
лучше K&R
21 ДенисЧ
 
07.08.15
14:24
(18) Это то же самое, что и (1)
22 ДенисЧ
 
07.08.15
14:25
(20) K&R - это голый С
23 mehfk
 
07.08.15
14:25
(21) Jawohl, Voldemar!
Только смотрится красивее.
24 mehfk
 
07.08.15
14:26
(22) Вопрос в топике и есть голый  Си.
25 Anton2016
 
07.08.15
14:26
Страуступ слишком большой философ...
справочник по С++ Шилдта как то ближе к теме...
мне всего то надо логи ipfw прочитать и в постгресс затолкать...
26 ДенисЧ
 
07.08.15
14:28
(25) Тогда лучше Ларри Уолла
27 ДенисЧ
 
07.08.15
14:29
(24) Ну, согласен...
В с++ использовался бы std::string ...
28 Anton2016
 
07.08.15
14:31
(26)
это по перлу что ли?
29 ДенисЧ
 
07.08.15
14:32
(28) разумеется. Для разбора логов самое то. (и ни для чего больше )))
30 Anton2016
 
07.08.15
14:33
я подумаю...
31 ДенисЧ
 
07.08.15
14:33
(30) Только не очень долго....
32 Anton2016
 
07.08.15
14:44
да уже написал...

#include <conio.h>
#include <iostream.h>
#include <fstream.h>
// #include <string.h>
// #include <STDDEF.h>
#define INTARRAYOFWORDSSMAXLENGTH 100
#define INTMAXLENGTHOFSTRING 100

using namespace std;
const int intMaxLengthOfString=1024;
ofstream streamDebug;
ifstream streamTextIn;
ofstream streamTextOut;

int intFnArrOfCharTrimAll(char* ArrayOfChar_param_OldString, char* ArrayOfChar_param_NewString) {
    int intlengthOfString=strlen(ArrayOfChar_param_OldString);
    if (intlengthOfString == 0) {
        ArrayOfChar_param_NewString=ArrayOfChar_param_OldString;
        return 0;
    }
    int intPositionFirstSymbolNoSpace=0;    
    for (int i=0; i<=intlengthOfString; i++) {
        if (ArrayOfChar_param_OldString[i]==' ')
            intPositionFirstSymbolNoSpace++;
        else
             break;
    }
    int intPositionLastSymbolNoSpace=0;

    char c;

    for (int i=intlengthOfString-1; i>=0; i--) {
        c=ArrayOfChar_param_OldString[i];
        if (c == ' ')
            continue;
        else {
            intPositionLastSymbolNoSpace=i;            
            break;
        }
            
    }
    for (int i=intlengthOfString-1; i>=0; i--) {
        c=ArrayOfChar_param_OldString[i];
        if (c == ' ')
            continue;
        else {
            intPositionLastSymbolNoSpace=i;            
            break;
        }
    }
    int j=0;
    for (int i=intPositionFirstSymbolNoSpace; i<=intPositionLastSymbolNoSpace; i++) {
        c = ArrayOfChar_param_OldString[i];
        ArrayOfChar_param_NewString[j] = c;
        j++;
    }
    return 0;
}    

int intFnArrOfCharDelGroupsOfSpaces(char* ArrayOfChar_param_OldString, char* ArrayOfChar_param_NewString) {

    int intlengthOfString=strlen(ArrayOfChar_param_OldString);
    if (intlengthOfString == 0) {
        ArrayOfChar_param_NewString=ArrayOfChar_param_OldString;
        return 0;
    }
    int intPositionFirstSymbolNoSpace=0;
    for (int i=0; i<=intlengthOfString; i++) {
        if (ArrayOfChar_param_OldString[i]==' ')
            intPositionFirstSymbolNoSpace++;
        else
             break;
    }
    int intPositionLastSymbolNoSpace=0;
    char c;
    for (int i=intlengthOfString-1; i>=0; i--) {
        c=ArrayOfChar_param_OldString[i];
        if (c == ' ')
            continue;
        else {
            intPositionLastSymbolNoSpace=i;            
            break;
        }
    }
    
    int flagSpace=0;
    int j=0;
    for (int i=intPositionFirstSymbolNoSpace; i<=intPositionLastSymbolNoSpace; i++) {
        c = ArrayOfChar_param_OldString[i];
        if (!(c == ' ')) {
            flagSpace = 0;
            ArrayOfChar_param_NewString[j] = c;
            j++;
        }
        else {
            if (flagSpace==0) {
                flagSpace = 1;
                ArrayOfChar_param_NewString[j] = c;
                j++;
            }
            else {
                flagSpace = 1;
                continue;
            }
        }
    }
    return 0;
}

int intFnArrOfCharFindSubString(char* ArrayOfChar_param_String1, char* ArrayOfChar_param_String2) {
    int intlengthOfString1=strlen(ArrayOfChar_param_String1);
    int intlengthOfString2=strlen(ArrayOfChar_param_String2);
    if (intlengthOfString1 < intlengthOfString2) return -1;
    int intFindPosition=0;
    int intLengthDelta=intlengthOfString1-intlengthOfString2;
    for (int i=0; i<=intLengthDelta; i++) {
        intFindPosition=i;
        for (int j=0; j<intlengthOfString2; j++) {
            if (! (ArrayOfChar_param_String1[i+j] == ArrayOfChar_param_String2[j]) )  {
                intFindPosition=-1;
                break;
            }
        }
        if ( intFindPosition >=0 ) {
            return intFindPosition;
        }
    }
    return -1;
}

int intFnArrOfCharIsContainsCharactersNotSpace(char* ArrayOfChar_param_String) {

    int intresult=0;
    int intlengthOfString=strlen(ArrayOfChar_param_String);
    if (intlengthOfString == 0) return 0;
    char c;
    for (int i=0; i<(intlengthOfString); i++) {
        c=ArrayOfChar_param_String[i];
        if (! (c == ' ') )  {
            intresult++;
        }
    }
    return intresult;
}

int main(int argc, char* argv[])
{
    cout << "Start..."  << endl;
    streamDebug.open("debug.log", ios::out);
    if (argc == 1 ) {
        cout << "Error: File name is absent.\n";
        while(!kbhit());
        return 1;      
    }
    char S[intMaxLengthOfString]={""};
    char* ArrayOfCharFileName=argv[1];
    streamTextIn.open(ArrayOfCharFileName, ios::in);
    if (!streamTextIn) {        
        cout << "Cannot open file <streamTextIn>.\n";
        while(!kbhit());
        return 1;      
    }      
    streamTextOut.open("trr.log", ios::out);
    if (!streamTextOut) {
        cout << "Cannot open file <streamTextOut>.\n";
        while(!kbhit());
        return 1;      
    }      
    if (!streamDebug) {
        cout << "Cannot open file <streamDebug>.\n";
        while(!kbhit());
        return 1;      
    }      
    char ArrayOfCharNewString[INTMAXLENGTHOFSTRING]={""};    
    char arrayWords[INTARRAYOFWORDSSMAXLENGTH][INTMAXLENGTHOFSTRING];
    int i, j;
    for (i=0; i<INTARRAYOFWORDSSMAXLENGTH; i++) {        
        for (j=0; j<INTMAXLENGTHOFSTRING; j++) {
             arrayWords[i][j]=NULL;
        }
    }
    while (!streamTextIn.eof())    {
        memset(S, NULL, INTMAXLENGTHOFSTRING);
        memset(ArrayOfCharNewString, NULL, INTMAXLENGTHOFSTRING);
        streamTextIn.getline(S, INTMAXLENGTHOFSTRING);
        if (intFnArrOfCharIsContainsCharactersNotSpace(S) == 0) continue;
        streamDebug << "S" << S << "\n";                      
        intFnArrOfCharDelGroupsOfSpaces(S, ArrayOfCharNewString);
        streamDebug << ArrayOfCharNewString << "\n";                                            
        int intlengthOfString=strlen(ArrayOfCharNewString);
        int intIndexOfWord=0;
        int intPositionInWord=0;
        char c;
        for (int i=0; i<=intlengthOfString; i++) {
            c = ArrayOfCharNewString[i];
            if (c == ' ') {
                intIndexOfWord++;
                intPositionInWord=0;
            }
            else {
                arrayWords[intIndexOfWord][intPositionInWord] = c;
                intPositionInWord++;
            }
        }
        int intFlagFoundCount = 0;
        for (int i=0; i<intIndexOfWord; i++) {
            intFlagFoundCount = intFnArrOfCharFindSubString(arrayWords[i], "count");
            if (  intFlagFoundCount >= 0) break;
        }
        if (intFlagFoundCount<0) continue;
        streamTextOut << arrayWords[8] << " ";                                            
        streamTextOut << arrayWords[2] << "\n";                                            
    }
    streamTextIn.close();
    streamTextOut.close();
    return 0;
}
33 Anton2016
 
07.08.15
14:45
на выходе текстовый файл - ip и объем трафика...
осталось только узнать как их в postgre затолкать...
ну и поправить... а так работает ;)
34 ДенисЧ
 
07.08.15
14:46
Смешались в кучу кони, люди...
На awk у тебя было 2 строки...
35 Anton2016
 
07.08.15
14:47
какие же?
36 Xapac
 
07.08.15
14:47
(32) убей себя за такой стиль
37 Anton2016
 
07.08.15
14:48
нет бесполезных знаний (с)
38 Anton2016
 
07.08.15
14:48
(6) и не подумаю xD
39 Anton2016
 
07.08.15
14:48
чем не нравится?
40 Xapac
 
07.08.15
14:49
(39) стиль школьной лабораторки.
41 Anton2016
 
07.08.15
14:50
накинулись... если че я на с второй день пишу ;)
42 Anton2016
 
07.08.15
14:51
и это моя первая работающая программа, ну за исключением Hello world! )
43 Anton2016
 
07.08.15
14:51
короче что поправить?
44 Xapac
 
07.08.15
14:52
не на с а на с++ в заголовке написано.
11 лет разницы вообщето
45 ДенисЧ
 
07.08.15
14:53
(43) Ctrl-A, Ctrl-S
46 Anton2016
 
07.08.15
14:54
Люди добрые, а еще подскажите как взаимодействовать консольной программе на С++ с базой данных postgresql.
47 Anton2016
 
07.08.15
14:55
на freebsd дело будет происходить... с odbc там плохо...
48 Anton2016
 
07.08.15
14:58
libpq.dll /  libpq.so надо подцепить? а как?
49 Xapac
 
07.08.15
14:59
(46)
погугли. там всё просто.
50 Anton2016
 
07.08.15
15:00
хм
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший