one more getline example
This commit is contained in:
@@ -208,7 +208,7 @@ In this assignment, we define that a child comment should be indented by four sp
|
|||||||
|
|
||||||
### getline
|
### getline
|
||||||
|
|
||||||
Unlike previous assignments where the input files only contain fields separated by spaces, in this assignment, fields are not separated by spaces, and therefore you may need a different way to read the input files. And the function *getline* will now come into play. To read the json file and store the whole json file into a std::string, you can use the following lines of code:
|
1. Unlike previous assignments where the input files only contain fields separated by spaces, in this assignment, fields are not separated by spaces, and therefore you may need a different way to read the input files. And the function *getline* will now come into play. To read the json file and store the whole json file into a std::string, you can use the following lines of code:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
// assume inputFile is a std::string, containing the file name of the input file.
|
// assume inputFile is a std::string, containing the file name of the input file.
|
||||||
@@ -229,6 +229,38 @@ Unlike previous assignments where the input files only contain fields separated
|
|||||||
|
|
||||||
After these lines, the whole content of the json file will be stored as a string in the std::string variable *json_content*. And you can then parse it to get each individual comment.
|
After these lines, the whole content of the json file will be stored as a string in the std::string variable *json_content*. And you can then parse it to get each individual comment.
|
||||||
|
|
||||||
|
2. **The second input file** contains comments, which may have spaces, and that makes it hard for you to use the >> operator to read the content of the file. Once again, the *getline* function can come into play. Let's say you want to read a line like this:
|
||||||
|
|
||||||
|
```console
|
||||||
|
reply_to_comment UgxCAk2MEXaUMS8E5dx4AaABAg UgxCAk2MEXaUMS8E5dx4AaABAg.0 @user3 "I love this song!"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can use the following lines of code:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// assuming opsFile is an std::ifstream object, which you use to open the second input file.
|
||||||
|
// assuming command, parent_id, id, author, comment are all std::string objects.
|
||||||
|
// read the command, the parent comment id, the child comment id, the author, the comment.
|
||||||
|
opsFile >> command;
|
||||||
|
opsFile >> parent_id;
|
||||||
|
opsFile >> id;
|
||||||
|
opsFile >> user;
|
||||||
|
// skip any whitespace to get to the next non-whitespace character
|
||||||
|
opsFile >> std::ws;
|
||||||
|
// now, read the comment
|
||||||
|
if (opsFile.peek() == '"') {
|
||||||
|
// if the field starts with a double quote, read it as a whole string
|
||||||
|
opsFile.get(); // consume the opening double quote
|
||||||
|
std::getline(opsFile, comment, '"'); // read until the closing double quote
|
||||||
|
// opsFile >> comment; // read the quoted field
|
||||||
|
if (!comment.empty() && comment.back() == '"') {
|
||||||
|
comment.pop_back(); // remove the closing double quote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
After executing the above lines, your *command* will be "reply_to_comment", your *parent_id* will be "UgxCAk2MEXaUMS8E5dx4AaABAg", your *id* will be "UgxCAk2MEXaUMS8E5dx4AaABAg.0", your *user* will be "@user3", your *comment* will be "I love this song!".
|
||||||
|
|
||||||
### print thumbs up symbol
|
### print thumbs up symbol
|
||||||
|
|
||||||
This line will print the thumbs up symbol, indicating likes.
|
This line will print the thumbs up symbol, indicating likes.
|
||||||
|
|||||||
Reference in New Issue
Block a user