0

我一直在摆弄这个,它返回的只是'save.rp'文件中单独行的前两个数字,

int characterPosition [2] = {0,0};

string convToStr(char *ch)
{
    stringstream ss;
    string res;
    ss << ch;
    ss >> res;
    return res;
}

int convToInt(string ch)
{
    stringstream ss(ch);
    int num;
    ss >> num;
    return num;
}

void loadSave()
{
    string loadPos;
    ifstream file("save.rp");
    if ((file.is_open())&&(file.good()))
    {
        getline(file,loadPos);
    }
    file.close();

    char str[] = {*loadPos.c_str()};
    char delim[] = "-";
    char *result = NULL;
    result = strtok(str, delim);
    int num = 0;
    while (result != NULL)
    {
        characterPosition[num] = convToInt(convToStr(result));
        cout << characterPosition[num] << endl;
        result = strtok(NULL, delim);
    }
}

“save.rp”文件如下所示:400-2000

它应该分别返回每个数字,在这种情况下是 400 和 2000。

我在这里做傻事吗?

4

3 回答 3

2

这条线

char str[] = {*loadPos.c_str()};

相当于

char str[] = {'4'};

这显然不是你想要的,你想要的

char str[] = "400-2000";

所以这样做

char str[500];                  // assuming your line length dont exceed 500
strcpy( str, loadPos.c_str() );
于 2013-04-22T23:28:08.960 回答
0

问题就在这里

char str[] = {*loadPos.c_str()};

loadPos.cstr()返回指向“400-2000”的指针;* 取消引用并给出第一个字符 - 即“4”。您使用第一个字符“4”初始化 str[]。str 现在是一个以 '4' 开头的数组,天知道之后会发生什么。您的所有操作都在此完成。

将上面的行更改为

char str[100];
strcpy(str,loadPos.c_str());

这里是如何避免 strtok 和 convToStr

int convToInt(string ch)
{
   stringstream ss(ch);
    int num;
    ss >> num;
    return num;
}

void loadSave()
{
    string loadPos;
    ifstream file("save.rp");
    if ((file.is_open())&&(file.good()))
    {
        getline(file,loadPos);
    }
    file.close();

    stringstream ss(loadPos);
    string token;

    while(getline(ss, token, '-'))
    {
        int r = convToInt(token);
        cout<<r<<endl;
    }

}
于 2013-04-22T23:28:55.210 回答
0
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main() {
    ifstream inf("save.rp");
    int characterPosition [2] = {0,0};
    int num=0;
    string line_buff;
    while(inf.good()){
        getline(inf, line_buff, '-');
        stringstream ss(line_buff);
        ss >> characterPosition[num++];
    }
    cout << characterPosition[0] << ',' << characterPosition[1] << endl;
    return 0;
}
于 2013-04-22T23:58:07.277 回答