Vectors and strings
std::vector
An example with std::vector
Consider the following program that "finds" even integer values stored in
an std::vector<int> vect and grows another std::vector<int> even_values with copies of the
even integers values found.
#include <iostream>
#include <vector>
int main() {
std::vector<int> vect{1, 2, 3, 4, 5}; // creates an std::vector<int> storing 1, 2, 3, 4, 5
std::vector<int> even_values; // init an empty std::vector<int>
for (unsigned int i = 0; i < vect.size(); ++i) {
if (vect.at(i) % 2 == 0)
even_values.push_back(vect.at(i));
}
std::cout << "Even values found: " << std::endl;
for (unsigned int i = 0; i < even_values.size(); ++i) {
std::cout << even_values.at(i) << std::endl;
}
}
std::string
An example with std::string
This example focuses on iterating over the characters comprising an input
string and making decisions based on those individual characters to formulate
a new string through string concatenation. Specifically, we will build a new
string revised containing the same characters as the input string minus any period
punctuation marks.
std::string input = "Howdy world.";
std::string revised;
for(unsigned int i = 0; i < input.size(); ++i) {
switch(input.at(i)) {
case '.' :
break;
default :
revised += input.at(i);
}
}
std::cout << "input: " << input << std::endl;
std::cout << "revised: " << revised << std::endl;
Activity: Individual words from std::string to std::vector<std::string>
Graded Playground Autograder
std::vector<std::string> WordsToVector(std::string str) in utilities.cc. This function must:
- Takes a single
std::stringas its argument - Return a
std::vectorwhere each word (whitespace delimited) in the parameterstris an element, with all occurrences of the punctuation {!,?,.,,} removed from it.
Hello, World!-->{"Hello", "World"}What is your name?-->{"What", "is", "your", "name"}Who? What? Where? Why? How?-->{"Who", "What", "Where", "Why", "How"}
<vector> and <string> in your solution.
Recommended process
Please do not overcomplicate this problem by attempting to use language facilities we have not taught. You can solve this problem using a combination of selection, iteration, and string concatenation. That's all you need!
Don't try to implement your solution to the whole problem at once! I recommend that you first create a function that removes the punctuation from an input string and returns a new string, containing all the original words, albeit with the punctuation removed. Before moving on, you can test your implementation driver.cc. Thereafter, you can define another function that returns an std::vector<std::string> that "splits" on whitespace an input string into a vector of "words"; extracting the last word will likely be a special case. You can test your word-extracting function by invoking it from the main function and printing out the contents of the std::vector<std::string> it returns using a for-statement. Finally, you can use these two functions to implement WordsToVector.