循环遍历向量中的字符串并删除空格

时间:2013-11-20 17:30:32

标签: c++ string vector

void getWords()
{
    string line;
    for (int i=0; i<assemb.size(); i++)
    {
        for (int word=0; word<assemb.at(i).size(); word++)
        {
            if (assemb.at(i).at(word) != ' ')
            {
                  getline(cin,line);
            }       

        } 
        fixedWords.push_back(line);
    }
}

我试图循环遍历这个字符串向量并删除不是空格的字符并将它们添加到另一个向量中,在我脑海中这个函数应该可以工作,但它似乎不会被困在某种循环中。

此刻打印出的字样为:

          VAR 0       
START:    LDN NUM01   
          SUB NUM02   
          STO MYSUM   
          LDN MYSUM   
          STO MYSUM   
END:      STP         
NUM01:    VAR 1025    
NUM02:    VAR 621     
MYSUM:    VAR 0 

但我希望他们成为:

-Var0
-Start:
-LDN
-NUM01
-SUB 
-NUM02
-STO
-MYSUM
-LDN
-MYSUM
-STO
-MYSUM
-END:
-STP
-NUM01
-VAR
-1025
-NUM02
-VAR
-621
-MYSUM
-0

这是汇编程序的一部分,它将一段汇编代码转换为二进制命令,然后将其输入到我编写的另一个能够读取和执行二进制命令的程序中。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

#include <iostream>
#include<vector>
#include<algorithm>
#include<iterator>
//#include<fstream>

using namespace std;

int main() {

std::vector<std::string> vec;
// std::ifstream fin("input.txt");
std::copy(std::istream_iterator<std::string>(std::cin), //fin
             std::istream_iterator<std::string>(),
             std::back_inserter(vec));

for(auto v:vec)
   std::cout<<"-"<<v<<std::endl;
return 0;
}

std::cin替换为std::ifstream作为文件

请参阅here

答案 1 :(得分:0)

看起来你想要的是非常接近这个:

std::copy(std::istream_iterator<std::string>(std::cin), 
          std::istream_iterator<std::string>(),
          std::ostream_iterator<std::string>(std::cout, "\n"));

唯一的区别是,这不会在每行的开头添加-。为此,我们可以使用transform代替copy

#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>

int main() {
    std::transform(std::istream_iterator<std::string>(std::cin),
        std::istream_iterator<std::string>(),
        std::ostream_iterator<std::string>(std::cout, "\n"),
        [](std::string const &in) { return "-" + in; });
    return 0;
}