繁体   English   中英

C ++从文件读取文本并将字符串解析为int数组

[英]C++ Reading text from a file and parsing a string into an int array

首先,我不是C ++专家,并且仍在学习中,因此,您将不胜感激。 起初这个问题似乎很简单,但是几个月后,我仍然找不到可行的解决方案。 我希望它有一个简单的答案,我只是忽略了。

以下是我在此处和其他站点上阅读类似线程所编写的一些代码。 基本上我想从包含GF256乘法数组(256行,每256长)的文本文件中读取。 逐行阅读似乎很好地证明了这一点(cout << multi_ << endl;),在这里我确切地看到了我需要作为每行的字符串。 正是在这一点上我有问题。 我似乎找不到一种将这个字符串解析为int数组的方法。 我对此代码进行了多次迭代,并尝试了不同的方法,但没有一个对我有用。 我认为对此有一个非常简单的解决方案。 再次,任何对此问题的见解将不胜感激。

int kGF = 0;
int multiGFtemp[256 * 256];

int n;

int main()
{
    string multi_;

    ifstream fileGF("GF256MultiTable.txt");

    if(fileGF.is_open())
    {
        while(getline(fileGF,multi_))
        {


            cout << multi_ << endl;
            cin.get();
        }
        fileGF.close();
    }
    else
    {
        cout << "File is not open" << endl;
    }

    cin.get();
    cout << multi_;

    stringstream stream2(multi_);

    while(stream2)
    {
        stream2 >> n;

        cout << n << endl;

        multiGFtemp[kGF] = n;
        kGF++;
    }

    for(int k = 0; k < 256 * 256; k++)
    {
        /*
        cout << multiGFtemp[k] << " ";
        */
    }

    cin.get();
    return 0;
}

您的程序将解析multi_的内容,后者是文件的最后一行。
您可以将其移动到循环中,但这只会使事情复杂化-如果只希望将256 * 256个数字放在一个普通数组中,则可以忽略文件结构。

这是将文件插入数组的一种方法:

int multiGFtemp[256 * 256];

int main()
{
    ifstream fileGF("GF256MultiTable.txt");
    int kGF = 0;
    while (kGF < 256 * 256 && fileGF >> multiGFtemp[kGF])
    {
        kGF++;
    }

    for(int k = 0; k < kGF; k++)
    {
        cout << multiGFtemp[k] << " ";
    }
}

我假设您正在尝试将已知格式的字符串读入参数。 例如,您的文件包含一行:“ X = 1035,Y = 6658”。 如果是这种情况,我更喜欢使用sscanf。

例如:

string format("X = %d, Y = %d");
string str("X = 1035, Y = 6658");
int x, y;
sscanf(str.c_str(), format, &x, &y);

Boost库可能会在这里为您提供帮助。 例如,看看Boost String Algo Split

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM