真ん中らへんの ostream のところから return is; のところまでは何をしているのですか?
この質問に関してはepistemeさんがすでにお答えしていらっしゃいますが
<<演算子や>>演算子をオーバーロードすることで
Aクラスのオブジェクトでも
c++
1cin >> a;
2cout << a << "\n";
のように書けるようにするための部分です。
9th.in というファイルの3行目から3+n行目までx座標,y座標が書かれているので,そのファイルの中の値を9th.outというファイルに読み込んで計算したいのですが
9th.in
1
2
3
41,1
52,2
63,3
74,4
85,5
96,6
という二次元ベクトルの複数記載されたテキストファイルがあり
それを加工して9th.outというテキストファイルに保存
したい...
というのであればsscanfを使っていたりエラー処理省いていたりで
あまりいいコードとは言えませんが
下記のコードを参考にしていただいたらどうでしょうか。
c++
1#include <iostream>
2#include <fstream>
3#include <vector>
4#include <string>
5#include <sstream>
6#include <array>
7#include <stdio.h>
8
9//
10// 定数群
11//
12constexpr unsigned int start_line = 3;//ファイルの読み書きを始める行数
13constexpr char input_path[] = "../9th.in";//入力するファイルのパス
14constexpr char output_path[] = "../9th.out";//出力するファイルのパス
15
16//
17// 型定義
18//
19using TwoDimVec = std::array<int,2>;//二次元ベクトル本体
20using XY = std::vector<TwoDimVec>;//xyの動的配列
21
22//
23// std::ifstreamからxy型への変換
24//
25XY ifstream2xy(std::ifstream& ifs, unsigned int start_line)noexcept
26{
27
28 std::string one_line;
29 std::vector<std::string> text;
30
31 while(getline(ifs, one_line))text.push_back(one_line);
32
33 XY result;
34 int x;
35 int y;
36
37 unsigned int ct = 0;
38 for(const auto& line:text){
39 if(ct>=start_line){
40 sscanf(line.c_str(), "%d,%d", &x, &y);
41 result.push_back({x,y});
42 }
43 ++ct;
44 }
45
46 return result;
47}
48
49//
50// XY型からstd::stringへの変換
51//
52std::string xy2str(const XY& xy, unsigned int start_line)noexcept{
53 std::stringstream result;
54 for(unsigned int loop=0;loop<start_line;loop++)result << std::endl;
55 for(const auto& line:xy){
56 result << line[0] << "," << line[1] << std::endl;
57 }
58 return result.str();
59}
60
61//
62// メイン関数
63//
64int main(){
65
66 //
67 // ここから9th.inを読み込むための処理
68 //
69 std::ifstream ifs(input_path);//入力ストリーム
70 std::ofstream ofs(output_path);//出力ストリーム
71 auto xy = ifstream2xy(ifs, start_line);//ifsからxy型への変換
72
73 //
74 // ここからxyの加工を行う
75 //
76 //xy[2][1] = 12345;//二行目のyを12345に書き換える
77 for(auto& line:xy)for(auto& axis:line)axis += 10;//全要素に10を足す
78
79 //
80 // ここからxyを9th.outへ書き込むための処理
81 //
82 auto str = xy2str(xy, start_line);//xyからstd::stringへ変換
83 std::cout << str << std::endl;//strを標準出力
84
85 ofs << str;//ファイル出力
86
87 //終了処理
88 ifs.close();
89 ofs.close();
90
91 return 0;
92}
93
見当違いな答えでしたら申し訳ございません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/18 09:05