1 Востаннє редагувалося Kizyak (13.10.2015 21:39:06)

Тема: Не працює програма

В мне не працює програма. Що з нею не так? Що зробити щоб вона працювала?
Вона просто повинна вивести кількість слів "new" в файлі.
Вибачте за стронній і непотрібний код.

#include <iostream>
#include <string>
#include <fstream>
#define NEWORD 100
using namespace std;

class Detection{
public:
    Detection(char* detFile);
    ~Detection();
    
    int findNew(void);
private:
    ifstream *inFile;
    string *mainFile;
    int neWord;
    
};
Detection::Detection(char* detFile){
    ifstream* inFile = new ifstream;
    try{
        inFile->open(detFile);
    }catch(int){}
}

Detection::~Detection(){
    inFile->close();
}

int Detection::findNew(void){
    neWord = 0;
    char fileStr[NEWORD];
    register int i;
    while(!inFile->eof()){
        inFile->getline(fileStr,100);
        
        for(i = 0; i<(NEWORD - 4);i++){
            if(fileStr[i] == 'n'){
                if(fileStr[i+1] == 'e'){
                    if(fileStr[i+2] == 'w'){
                        if(fileStr[i-1] == ' '){
                            if(fileStr[i+3] == ' '){
                                ++neWord;
                            }
                        }
                    }
                }
            }
        }
    }
    inFile->close();
    return neWord;
};

int main(int argc, char* argv[]){
    Detection det(argv[1]);
    unsigned int i = det.findNew();
    cout<<i;
    return 0;
}
Максимальний розмір підпису: 400 символів завдовжки та 4 рядків заввишки

2 Востаннє редагувалося 0x9111A (13.10.2015 23:40:14)

Re: Не працює програма

Як ви її запустили, який вміст файлу і як вона "не працює"?

Прихований текст

        for(i = 0; i<(NEWORD - 4);i++){
            if(fileStr[i] == 'n'){
                if(fileStr[i+1] == 'e'){
                    if(fileStr[i+2] == 'w'){
                        if(fileStr[i-1] == ' '){
                            if(fileStr[i+3] == ' '){
                                ++neWord;
                            }
                        }
                    }
                }
            }
        }

http://cs6.pikabu.ru/images/big_size_comm/2014-10_1/14123550749020.jpg

Maybe a = Just a | Nothing
Подякували: koala, Kizyak, leofun013

3

Re: Не працює програма

Там не тільки очам боляче...
Як ви гадаєте:
1. Яке буде значення fileStr[i-1], якщо i==0?
2. Яке буде значення fileStr[i+3], якщо i==NEWORD - 5, а в файлі 10 символів?

Подякували: Kizyak1

4

Re: Не працює програма

"ошибка сегментирования"

0x9111A написав:

Як ви її запустили, який вміст файлу і як вона "не працює"?

Прихований текст

        for(i = 0; i<(NEWORD - 4);i++){
            if(fileStr[i] == 'n'){
                if(fileStr[i+1] == 'e'){
                    if(fileStr[i+2] == 'w'){
                        if(fileStr[i-1] == ' '){
                            if(fileStr[i+3] == ' '){
                                ++neWord;
                            }
                        }
                    }
                }
            }
        }

http://cs6.pikabu.ru/images/big_size_comm/2014-10_1/14123550749020.jpg

Максимальний розмір підпису: 400 символів завдовжки та 4 рядків заввишки

5

Re: Не працює програма

koala написав:

Там не тільки очам боляче...
Як ви гадаєте:
1. Яке буде значення fileStr[i-1], якщо i==0?
2. Яке буде значення fileStr[i+3], якщо i==NEWORD - 5, а в файлі 10 символів?

1.Я не думаю, що new повинне стояти на першому місці у радку.
2.Ви праві, краще було б використовувати функцію "get" або ж тип "std::string".

Максимальний розмір підпису: 400 символів завдовжки та 4 рядків заввишки

6 Востаннє редагувалося Betterthanyou (14.10.2015 11:37:03)

Re: Не працює програма

щоб не писати таке для типу char

if(fileStr[i+1] == 'e'){
                    if(fileStr[i+2] == 'w'){
                        if(fileStr[i-1] == ' '){
                            if(fileStr[i+3] == ' '){
                                ++neWord;
                            }
                        }
                    }
                }

Використайте функцію strcmp - враховувати регістр, stricmp - не враховувати регістр

Подякували: Kizyak1

7

Re: Не працює програма

І взагалі для виокремлення слів існує strtok.

Подякували: Kizyak1