我正在尝试读取从文本文件中计算出的有限元代码的大矩阵。矩阵在空间上依赖,因此我需要能够方便地组织数据。计算矩阵值的外部源足以将以下行放在文本文件的顶部
No. activity levels : 3 No. pitch-angles : 90 No. energies : 11 No. L-shells : 10
这基本上告诉我矩阵的位置数量。我希望能够轻松地选择这些值,因为它允许我预先分配矩阵的大小,以及立即知道我需要为此文本文件未给出的值插入多少内容。我试图用以下代码
来做到这一点#include<iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
using namespace std;
int main(){
string diffusionTensorFileName = "BAS_drift_averaged_chorus_kp.txt";
string sline;
int alphaSize=0;
ifstream diffusionTensorFile(diffusionTensorFileName.c_str());
while(getline(diffusionTensorFile,sline)){
if(strncmp(sline.c_str(),"No. pitch-angles : 90",sline.size()-1)==0 && sline.size()-1 != 0){
alphaSize = atoi(sline.c_str());
printf("alphaSize %d \n", alphaSize);
vector<double> alpha(alphaSize);
}
}
}
atoi当然不能很好地工作,我似乎也无法使用strtod或任何其他功能。有什么想法吗?我也对这是完全错误的做法以及如何继续提出建议。
答案 0 :(得分:0)
我认为最简单的方法是使用流语言环境中充满scan_is
方面的std::ctype
方法。它的工作是搜索与给定分类匹配的第一个字符并返回指向它的指针。我们将获取该调用的结果并使用std::stoi
(C ++ 11)将其解析为整数。
std::locale loc(diffusionTensorFile.getloc());
auto& f = std::use_facet<std::ctype<char>>(loc);
while (std::getline(diffusionTensorFile, sline))
{
const char* begin = sline.front(),
end = sline.back() + 1;
const char* result;
if ((result = f.scan_is(f.digit, begin, end)) != end)
{
alphaSize = std::stoi(result);
// do something with alphaSize
}
}