Skip to content
Related Articles

Related Articles

How to input a comma separated string in C++?
  • Difficulty Level : Hard
  • Last Updated : 31 Oct, 2019

Given an input string which is comma-separated instead of space, the task is to parse this input string in C++.

First, let us understand what difference does it create if the input string is comma-separated.
Taking input a whitespace-separated string

Taking input a whitespace-separated string in C++ is very easy. The program to do so is:




#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    string str;
  
    // Get the string
    getline(cin, str);
  
    // Print the words
    istringstream ss(str);
    do {
        string word;
        ss >> word;
        cout << word << endl;
    } while (ss);
}


Input:

1 2 3 4 5 6

Output:



1
2
3
4
5
6

Why can’t we use the above code for comma-separated input string?
The above code works fine for a whitespace-separated input string, but for a comma-separated input string, it won’t work as expected, because the program will take complete input as a single word in the string.

Input:

1, 2, 3, 4, 5, 6

Output:

1, 2, 3, 4, 5, 6

How to input a comma separated string?
Now inorder to input a comma separated string, following approach can be used:

  1. Get the string to be taken as input in stringstream
  2. Take each character of the string one by one from the stream
  3. Check if this character is a comma (‘, ‘).
  4. If yes, then ignore that character.
  5. Else, Insert this character in the vector which stores the words

Below is the implementation of the above approach:




// C++ program to input
// a comma separated string
  
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    // Get the string
    string str = "11,21,31,41,51,61";
  
    vector<int> v;
  
    // Get the string to be taken
    // as input in stringstream
    stringstream ss(str);
  
    // Parse the string
    for (int i; ss >> i;) {
        v.push_back(i);
        if (ss.peek() == ',')
            ss.ignore();
    }
  
    // Print the words
    for (size_t i = 0; i < v.size(); i++)
        cout << v[i] << endl;
}


Output:

11
21
31
41
51
61

Attention reader! Don’t stop learning now. Get hold of all the important C++ Foundation and STL concepts with the C++ Foundation and STL courses at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :