Перестановка строк C ++ - PullRequest
0 голосов
/ 30 марта 2012

Я тяну текстовый файл - он будет введен пользователем в настоящее время его просто вытягивает из C: \ Dump \ test.txt Я хочу переставить слова в указанном файле

Это то, что у меня есть

static string revFunc(string a)
{
    ifstream inp;
    inp.open(a, std::ios::in);
    string lines;

    while(getline(inp, lines)){
        istringstream iss(lines);
        string outstr;
        string word;
        iss >> outstr;
        if (inp >> word){
            outstr = word + ' ' + outstr + ' ';
            cout << outstr;

        }
    }return 0;
}

строка a это путь к файлу на жестком диске это будет анализировать 2 строки назад в файле тестера ~ 13 строк

это от int main ()

int main(){
string file;
int words = 0;
int lines = 0;
int choice;

system("cls");

cout << "Enter Filename: " << endl;
file = "C:\\Dump\\test.txt";
cout << file;
//cin >> file;

cout <<"MENU"<<endl;
cout <<"----------------------------------" << endl;
cout << "1. Count Words" << endl;
cout << "2. Count Lines" << endl;
cout << "3. Index Words" << endl;
cout << "4. Average Length of Words" << endl;
cout << "5. Print Text File to Screen" << endl;
cout <<"----------------------------------" << endl;
cout << "??: ";
cin >> choice;

switch(choice){

case 1: cout << "Words: " << wordFunc(file) << endl;
        system("PAUSE");
        break;
case 2: cout << "Lines: " << lineFunc(file, lines) << endl;
        system("PAUSE");
        break;
case 3: indexFunc(file);
        system("PAUSE");
        break;
case 4: cout << "Average Length: " << avgWordFunc(file) << endl;
        system("PAUSE");
        break;
case 5: printStrFunc(file);
        cout <<endl;
        system("PAUSE");
        break;
case 6: revFunc(file);
        cout << endl;
        system("PAUSE");
        break;

}

return 0;
}

Затем программа прерывается - я уверен, из-за плохого кодирования :) Любая помощь, указывающая на мои нелепые ошибки, ценится

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вы говорите, что refFunc возвращает string, но возвращаемое значение равно 0 (int, а не string).

Это приведет к проблеме, так какПрограмма пытается использовать строковый объект и находит «мусор» (который был выделен в ожидании строки, но не был заполнен правильными битами строки).

Чтобы исправить, вам нужно либоизмените возвращаемый тип на int или измените возвращаемое значение на допустимую строку (например, "").

В качестве альтернативы, если вы не используетевозвращаемое значение (как в вашем примере), вы можете изменить тип возвращаемого значения на void.В этом случае используйте только return; (примечание: нет значения после возврата), или вы можете не указывать весь оператор return;

ПРИМЕЧАНИЕ. Во избежание таких ошибок в будущем настройте компилятор так, чтобы он компилировался максимальноустановка предупреждений и возможно с предупреждениями, превращенными в ошибки.Это не позволит вам скомпилировать вашу программу, по крайней мере компилятор не скажет вам, что вы что-то делаете (скорее всего) неправильно

ПРИМЕЧАНИЕ. Не изучайте привычку использовать system() даже для приостановки приложения.Это зависит от платформы и может представлять угрозу безопасности (хотя я не думаю, что вы будете беспокоиться об этом некоторое время)

1 голос
/ 30 марта 2012

Вы должны удалить return 0 и заменить его действительным string

Я думаю, вы должны использовать return outstr; в конце функции revFunc вместо return 0;

Кроме того, переместите string outstr; на вершину while(...):

static string revFunc(string a)
{
    ifstream inp;
    inp.open(a, std::ios::in);
    string lines;

    string outstr;
    while(getline(inp, lines)){
        istringstream iss(lines);
        string word;
        iss >> outstr;
        if (inp >> word){
            outstr = word + ' ' + outstr + ' ';
            cout << outstr;

        }
    }return outstr;
}
...