#Vector配列を使う→「Debug assertion failed」
和歌を57577(半角スペースの区切り)ごとに配列に代入したいと思い、その際テキストファイルの内容がいくら増えてもいいよう可変長配列であるVector配列を使おうと考えました。しかし、配列を一時的に要素数が10の通常の配列にした場合は正しくプログラムが動作するのに、いざVector配列にするとポップアップウィンドウで**「Debug assertion failed」と表示され**、プログラムが動かせないので困っています。(ソースコード6行目)
Vector配列を使ったときでも、問題なくプログラムが動作するようにするにはどのような改善を加えればよいでしょうか。教えていただけるとありがたいです。
[DataFile.txt] 世の中は 常にもがもな 渚漕ぐ あまの小船の 綱手かなしも 大海の 磯も轟に 寄する波 割れて砕けて 裂けて散るかも
C++
1#include<iostream> 2#include<fstream> 3#include<string> 4#include<vector> 5const std::string DataFileName="DataFile.txt"; 6std::vector<std::string> Data;//おそらくここが原因 7 8std::vector<std::string> split(std::string str, char del) 9{ 10 int first = 0; 11 int last = str.find_first_of(del); 12 13 std::vector<std::string> result; 14 15 while (first < str.size()) { 16 std::string subStr(str, first, last - first); 17 18 result.push_back(subStr); 19 20 first = last + 1; 21 last = str.find_first_of(del, first); 22 23 if (last == std::string::npos) { 24 last = str.size(); 25 } 26 } 27 28 return result; 29} 30 31int FileLoad(std::string LoadFileName) 32{ 33 std::ifstream ifs(LoadFileName); 34 std::string str; 35 int i = 0; 36 37 if (ifs.fail()) 38 { 39 std::cout << "データファイルのオープンに失敗しました。" << std::endl; 40 return -1; 41 } 42 else 43 { 44 std::cout << "データファイルのオープンに成功しました。データファイルの読み込みを行います。" << std::endl << std::endl; 45 } 46 47 while (getline(ifs, str)) 48 { 49 std::cout << "#" << str << std::endl; 50 Data[i] = split(str, ' ')[0]; i++; 51 Data[i] = split(str, ' ')[1]; i++; 52 Data[i] = split(str, ' ')[2]; i++; 53 Data[i] = split(str, ' ')[3]; i++; 54 Data[i] = split(str, ' ')[4]; i++; 55 } 56 57 return 0; 58} 59 60int main() 61{ 62 FileLoad(DataFileName); 63 getchar(); 64 return 0; 65}
[実行時に表示された内容]
データファイルのオープンに成功しました。データファイルの読み込みを行います。
#世の中は 常にもがもな 渚漕ぐ あまの小船の 綱手かなしも
言語:C++
開発環境:Microsoft Visual Studio 2017
回答していただけると幸いです。
split()を複数回呼び出していますがいいのですか?
回答3件
あなたの回答
tips
プレビュー