[問題] 在vector中合併符合條件的element

作者: bulls5566 (公牛5566)   2017-06-05 14:28:38
開發平台(Platform): (Ex: Win10, Linux, ...)
Win8.1
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
NO
問題(Question):
我最近PYTHON剛轉入C++
雖說知道C++文字處理相較PYTHON困難
但還是想投入,希望能上手
我目前卡住了
我想把INPUT 變成 OUTPUT那種格式
目前已經把INPUT的資料讀檔丟進vector裡
想要從Vector中,去處理文字
我想要像output那樣
每一行第一個數字顯示這一行共有幾組編碼
例如 1 xy 2 , xy 2 就是一組編碼
又如 5 R 1004 I 5678 E 2000 R 8002 E 7001
R 1004 / I 5678 / E 2000 / R 8002 / E 7001 各自都是一組編碼
但目前發現,空白也是vector一個element,單一的數字也是element,xy中x和y各自都是
獨立的element
想要請問一下如何在vector中,只要element之間沒有space,就合併成一個element
例如 x和y合併 / 1 0 0 4 合併成1004
而且又要排成output的格式
也就是每個文字之間都空一格
餵入的資料(Input):
1
xy 2
2 z xy
5 R 1004 I 5678
E 2000 R
8002 E 7001 0 1 z
6 R 8001 E 1000 E
1000 E 3000 R 1002 A 1010
0
1
z
2
R
5001
E 4000
1 z 2
2
xy z
3 A 8000
E 1001 E 2000
預期的正確結果(Expected Output):
1 xy 2
2 z xy
5 R 1004 I 5678 E 2000 R 8002 E 7001
0
1 z
6 R 8001 E 1000 E 1000 E 3000 R 1002 A 1010
0
1 z
2 R 5001 E 4000
1 z 2
2 xy z
3 A 8000 E 1001 E 2000
錯誤結果(Wrong Output):
目前有跑過iterator,內圈用while loop,直接前面合併後面
但是code不合法
上網找範例找破頭
如果是一開始就不該存進vector的話,也麻煩不吝指教,我想學習判斷如何用正確的方式
儲存資料
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main() {
// Open our file
ifstream inFile("inputfile",ifstream::in);
// If we can read/write great
if (inFile.good()) {
// Create a vector of strings
std::vector<string> strVector;
// Create a string variable to hold each line read from the file.
string line;
// Read throuthe file and push onto our vector
while (!inFile.eof()) {
getline(inFile,line);
strVector.push_back(line);
}
// combine character together
// create a vector iterator
vector<string>::iterator iterate_inFileLine;
// loop through the vector from start to end
for (iterate_inFileLine = strVector.begin(); iterate_inFileLine <
strVector.end(); iterate_inFileLine++){
while (iterate_inFileLine !=""){
strVector[iterate_inFileLine] = strVector[iterate_inFileLine] +
strVector[iterate_inFileLine + 1];
}
}
/*
// Create a vector iterator
vector<string>::iterator it;
// Loop through the vector from start to end and print out the string
// the iterator is pointing to.
for (it = strVector.begin(); it < strVector.end(); it++) {
cout << *it << endl;
}
*/
}
inFile.close();
system("pause");
return 0;
}
補充說明(Supplement):
作者: a29022792 (我貓廚我驕傲)   2017-06-05 15:34:00
我覺得可以宣告二維的vector 每個vector存一組編碼一維存編碼 第二維將編碼關聯起來
作者: libertyleave (SSLin)   2017-06-05 16:15:00
你可以考慮先簡單的用scanf 將你要的資料用正確的格式讀入 再存成vector直接把讀入的整行丟進 vector 我覺得不好處理把全部都直接串成一個 string 也比直接存vector簡單我突然想到可以用inFile>>str呀這樣一次只讀一個字
作者: fatrabitree (胖兔子)   2017-06-05 17:41:00
基本io題 cin>>處理就好了
作者: hunandy14 (Charlott.HonG)   2017-06-06 12:01:00
while(fs >> str_p) {cout << str_p << endl;}stream 就是那個 >> 預設(可選) 忽略空白跟跳行http://ideone.com/I4ir8e 暴力解 想不到好方法QQ
作者: libertyleave (SSLin)   2017-06-09 10:36:00
http://ideone.com/v9PhQ7 我的作法 一樣暴力解

Links booklink

Contact Us: admin [ a t ] ucptt.com