Save selected characters in a string vector

I have to store it reasonably char

in std::vector

strings if conversion is considered.

Here's an example:

vector<string> f (vector<string> input)
{
    vector<string> output;
    for (int i=0; i<input.size(); i++)                 // vector iteration
    {
        for (int j=0;j<input[i].size(); j++)           // string iteration
        {
            output.push_back(string(input[i].at(j)));  // access to characters
        }
    }

    return output;
}

      

input[i]

- this string

, a input[i].at(j)

- char

; so i converted it to string

before clicking on vector<string>

.

I am wondering what happened to this approach. In particular, the compiler error is beyond comprehension for me:

invalid conversion from '__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}' to 'const char*' [-fpermissive]

      

Edit:

f

should work like this.

Assume that the vector input

has 3 lines: {abcd,efdr,loab}

; then output

should extract all aormic characters such as:{abcdefdrloab}

+3


source to share


2 answers


To fix changing your mistake

    output.push_back(string(&input[i].at(j)));

      

from

  output.push_back(string(input[i].at(j)));

      

Basically

**for (int i=0; i<input.size(); i++)  \\vector iteration**

      

This is the wrong way to iterate. For containers, iterators should be used to iterate

Below is a string copied from one vector (using iterator and stl you can use copy_if or lambda)

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

using namespace std;
vector<string> f (vector<string> input)
{
    vector<string> output;
    copy(input.begin(),input.end(),back_inserter(output));

    return output;
}

int main()

{
    vector<string> h{"hello"},x;
    x=f(h);
    copy(x.begin(),x.end(),ostream_iterator<string>(cout," "));
}

      

Output

hello Program ended with exit code: 0

      



But to answer your question and fix your code

Below is the modified code

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

using namespace std;

vector<string> f (vector<string> input)
{
    vector<string> output;
    for (int i=0; i<input.size(); i++)
    {
        for (int j=0;j<input[i].size(); j++)
        {
            output.push_back(string(&input[i].at(j)));
        }
    }

    return output;
}
vector<string> fi (vector<string> input)
{
    vector<string> output;
    copy(input.begin(),input.end(),back_inserter(output));

    return output;
}

int main()

{
    vector<string> h{"hello"},x,y;
    x=fi(h);
    y=f(h);
    copy(x.begin(),x.end(),ostream_iterator<string>(cout," "));
    copy(y.begin(),y.end(),ostream_iterator<string>(cout," "));

}

      

Output

hello hello ello llo lo o Program ended with exit code: 0

      

Solution after editing

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

using namespace std;

template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
    (v.push_back(args), ...);
}


int main()

{
    vector<string>x;
    push_back_vec(x, "abc", "cds", "ma");

    string a = accumulate(x.begin(), x.end(), string(""));
    cout<<a;
}

      

Output

abccdsmaProgram ended with exit code: 0

      

Simpler format

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

using namespace std;

int main()

{
    vector<string>x{"abc", "cds", "ma"},a;
    a.push_back(accumulate(x.begin(), x.end(), string("")));
    copy(a.begin(),a.end(),ostream_iterator<string>(cout," "));

}

      

+2


source


try it string(1, input[i].at(j))



0


source







All Articles