如何解决发现空格时,c ++将文件拆分为记录?
我有一个像这样的文件
2.7388 0 2.4670
3.6384 1 24.5927
8.7844 0 10.6871
11.2892 0 2.6507
19.6054 1 16.8974
25.8811 0 8.0084
例如,我将采用第一行2.7388 0 2.4670
。我正在尝试完成以下操作
2.7388 = double x
0 = int y
2.4670 = double z
我的尝试
struct fileReader{
double x;
int y;
double z;
};
std::vector<fileReader> afileReader(std::string fileName) {
std::vector<fileReader> readtheFile;
std::ifstream List;
std::string line;
List.open(fileName);
char delimiter = ' '; //delimiter added
while (std::getline(List,line))
{
line.pop_back();
std::string token;
std::istringstream ss(line);
fileReader afileReader;
std::getline(ss,token,delimiter);
afileReader.x = std::stod(token); //change from stoi to stod
std::getline(ss,delimiter);
afileReader.y = std::stoi(token);
std::getline(ss,delimiter);
afileReader.z = std::stod(token); //change from stoi to stod
readtheFile.push_back(std::move(afileReader));
}
for(fileReader x: readtheFile) {
std::cout << x.x;
std::cout << x.y;
std::cout << x.z;
}
return readtheFile;
passengerList.close();
}
从主行afileReader("file.txt")
开始运行时。我收到以下错误
terminate called after throwing an instance of 'std::invalid_argument'
what(): stod //error changed
Aborted (core dumped)
我不确定为什么将stoi作为正确的转换方法将stoi转换为字符串(因为令牌是字符串)的错误
尽管我希望在打空格时拆分记录,但还是要回头再问。因此,请回到上一个示例2.7388 0 2.4670
,当读取2.7388
时将其分配给变量x
,当读取0
时将其分配给变量y
,并且2.4670
被分配给变量z
解决方法
(推荐)更直接的方法:
import { observer } from "mobx-react-lite";
import React,{ Fragment } from "react";
import {
Route,RouteComponentProps,Switch,withRouter,} from "react-router-dom";
import { ToastContainer } from "react-toastify";
import { Container } from "semantic-ui-react";
import CheckinAuthorize from "../../features/checkin/CheckinAuthorize";
import CheckinDetails from "../../features/checkin/CheckinDetails";
import HomePage from "../../features/home/HomePage";
import NavBar from "../../features/nav/NavBar";
import NotFound from "./NotFound";
const App: React.FC<RouteComponentProps> = ({ location }) => {
return (
<Fragment>
<Route exact path="/" component={HomePage} />
<Route
path={"/(.+)"}
render={() => (
<Fragment>
<ToastContainer position='bottom-right'/>
<NavBar />
<Container style={{ marginTop: "7em" }}>
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="/checkin" component={CheckinAuthorize} />
<Route path="/checkin/:id" component={CheckinDetails} />
<Route component={NotFound} />
</Switch>
</Container>
</Fragment>
)}
/>
</Fragment>
);
};
export default withRouter(observer(App));
原始代码存在问题:
-
import React from "react"; import { Menu,Container } from "semantic-ui-react"; import { observer } from "mobx-react-lite"; import { NavLink } from "react-router-dom"; const NavBar: React.FC = () => { return ( <div> <Menu fixed="top" inverted> <Container> <Menu.Item header as={NavLink} exact to="/"> <img src="/assets/logo.png" alt="logo" style={{ marginRight: "10px" }} /> Home </Menu.Item> </Container> </Menu> </div> ); }; export default observer(NavBar);
和#include <fstream> #include <iostream> #include <vector> struct Data { double x; int y; double z; }; std::vector<Data> fileReader(std::string fileName) { std::vector<Data> result; std::ifstream file(fileName); Data data; while (file >> data.x >> data.y >> data.z) result.push_back(data); for (auto &&i : result) std::cout << i.x << ' ' << i.y << ' ' << i.z << '\n'; return result; } int main() { fileReader("test.txt"); }
不是浮点数字。 -
fileReader::x
未被作为分隔符传递给对fileReader::z
的调用。 - 正在读取的文件中的间距不一致。 (FIX)
- 出于某些奇怪的原因,您正在做
' '
; - [某些警告的原因]您没有从
std::getline
(非无效函数)返回任何内容。
固定代码:
line.pop_back()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。