C 从文件中读取文本,然后将字符串解析为int数组

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

本文关键字:字符串 数组 int 然后 文件 读取 取文本      更新时间:2023-10-16

首先,我不是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字符串算法拆分。