字符串重排C ++

时间:2012-03-30 09:59:58

标签: c++ string function stringstream

我拉一个文本文件 - 它将由用户输入 目前它只是从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是hdd上文件的路径 这将向后解析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 个答案:

答案 0 :(得分:1)

您应该移除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;
}

答案 1 :(得分:1)

您说refFunc返回string,但返回值为0int,而不是string

这将导致一个问题,因为程序试图使用一个字符串对象,并找到“垃圾”(已经预期一个字符串分配但尚未填充字符串的正确位)。

要修复,您需要将返回类型更改为int或将返回更改为有效字符串(例如"" )。

或者,如果您没有使用返回值(如示例中的情况),则可以将返回类型更改为void。在这种情况下,只使用return;(注意:返回后没有值),或者你可以保留整个return语句;

注意:为防止将来出现此类错误,请将编译器配置为使用最大警告设置进行编译,并可能将警告变为错误。这将阻止您编译程序,至少编译器不会告诉您正在做某事(很可能)不正确

注意:即使暂停您的应用程序,也不要习惯使用system()。它依赖于平台,并且可能带来安全风险(虽然我认为你暂时不会担心这一点)