1
votes

I am having trouble trying to append a value from a character vector into a string.

Below is a function that needs to convert an input string like 'isValidString' into an output vector of strings that looks like: {is", "valid", "string"}, ie., break the input string, at the occurrence of a Capital letter and then store the strings into a vector (after converting all letters into small case).

The compiler throws an error:

C2664: 'std::basic_string<_Elem,_Traits,_Alloc> &std::basic_string<_Elem,_Traits,_Alloc>::append(const std::basic_string<_Elem,_Traits,_Alloc> &)' : cannot convert parameter 1 from 'char' to 'const std::basic_string<_Elem,_Traits,_Alloc> &'

#include <iostream>
#include <string>
#include <vector>

using namespace std;
void string_separator(string in_string)
{
    int i = 0, j = 0;
    vector<string> out_string_vect;
    char lower_case_alpha_arr[] = {'a', 'b', 'c'};
    char upper_case_alpha_arr[] = {'A', 'B', 'C'};

    // Creating vectors from arrays
    vector<char> lower_case_alpha_vect;
    vector<char> upper_case_alpha_vect;
    string out_string;
    lower_case_alpha_vect.assign(lower_case_alpha_arr, lower_case_alpha_arr+3);
    upper_case_alpha_vect.assign(upper_case_alpha_arr, upper_case_alpha_arr+3);

    while(i < in_string.length())
    {
        for(j = 0; j < upper_case_alpha_vect.size(); j++)
        {
            if (in_string[i] == upper_case_alpha_vect.at(j))
            {
                out_string.append('\0'); 
                out_string_vect.emplace_back(out_string);
                cout << "out_string: " << out_string << endl;
                out_string.clear();
            }
            else
            {
                char temp = lower_case_alpha_vect.at(j);
                out_string.append(temp); // THIS IS WHERE THE COMPILER THROWS THE ERROR!!
                //out_string_vect.emplace_back(in_string[i]);
            }
        }
        i++;
    }
    cout << "out_string: " << out_string << endl;
    }
}
1

1 Answers

0
votes

The version of the std::string append function that takes a (single) character argument also needs a count argument. It will append count copies of the character to the string. (See the first overload on this cppreference page.)

So, to append a single character, just use 1 as that count. Thus, instead of:

    out_string.append(temp);

use:

    out_string.append(1, temp);

Alternatively, you can use the += operator of the std::string class:

    out_string += temp;