Hi all,
I have following string
0x0002,A5651QPR87GBZ094RTF52,D,A,000001,ABC ,10000.00 , EOT
i need to split the above using ',' as the delimiter & put those in to the following string variables.
1.Command
2.Key
3.Msgtype
4.number
5.name
6.amount
pls reply me as sap.
Regards

Recommended Answers

You can use string.find and string.substr for that
Here's a link with an example

Jump to Post
int main()
{
    string str = "0x0002,A5651QPR87GBZ094RTF52,D,A,000001,ABC ,10000.00 , EOT";
    string word;
    stringstream stream(str);
    while( getline(stream, word, ',') )
        cout << word << "\n";
}
Jump to Post

Nothing magical going on here, but in an uncharacteristic move, I actually added comments. Yes, I'm bored:

#include <string>
#include <vector>

//! Maintains a collection of substrings that are
//! delimited by a string of one or more characters
class Splitter {
  //! Contains the split tokens …
Jump to Post

All 9 Replies

You can use string.find and string.substr for that
Here's a link with an example

int main()
{
    string str = "0x0002,A5651QPR87GBZ094RTF52,D,A,000001,ABC ,10000.00 , EOT";
    string word;
    stringstream stream(str);
    while( getline(stream, word, ',') )
        cout << word << "\n";
}

Nothing magical going on here, but in an uncharacteristic move, I actually added comments. Yes, I'm bored:

#include <string>
#include <vector>

//! Maintains a collection of substrings that are
//! delimited by a string of one or more characters
class Splitter {
  //! Contains the split tokens
  std::vector<std::string> _tokens;
public:
  //! Subscript type for use with operator[]
  typedef std::vector<std::string>::size_type size_type;
public:
  //! Create and initialize a new Splitter
  //!
  //! \param[in] src The string to split
  //! \param[in] delim The delimiter to split the string around
  Splitter ( const std::string& src, const std::string& delim )
  {
    reset ( src, delim );
  }

  //! Retrieve a split token at the specified index
  //!
  //! \param[in] i The index to search for a token
  //! \return The token at the specified index
  //! \throw std::out_of_range If the index is invalid
  std::string& operator[] ( size_type i )
  {
    return _tokens.at ( i );
  }

  //! Retrieve the number of split tokens
  //!
  //! \return The number of split tokesn
  size_type size() const
  {
    return _tokens.size();
  }

  //! Re-initialize with a new soruce and delimiter
  //!
  //! \param[in] src The string to split
  //! \param[in] delim The delimiter to split the string around
  void reset ( const std::string& src, const std::string& delim )
  {
    std::vector<std::string> tokens;
    std::string::size_type start = 0;
    std::string::size_type end;

    for ( ; ; ) {
      end = src.find ( delim, start );
      tokens.push_back ( src.substr ( start, end - start ) );

      // We just copied the last token
      if ( end == std::string::npos )
        break;

      // Exclude the delimiter in the next search
      start = end + delim.size();
    }

    _tokens.swap ( tokens );
  }
};

#include <iostream>

int main()
{
  const std::string line =
    "0x0002,A5651QPR87GBZ094RTF52,D,A,000001,ABC ,10000.00 , EOT";

  Splitter split ( line, "," );

  for ( Splitter::size_type i = 0; i < split.size(); i++ )
    std::cout<<'|'<< split[i] <<"|\n";
}

OMG Narue, why did you make that soooo difficult ?? I think you outdid yourself on this one:) See my post if you missed it.

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	char str[] = "0x0002,A5651QPR87GBZ094RTF52,D,A,000001,ABC ,10000.00 , EOT";
	char* pch;
	pch = strtok(str, ", ");
	while (pch != NULL) {
		cout << pch << endl;
		pch = strtok(NULL, ", ");
	}
	return 0;
}

>OMG Narue, why did you make that soooo difficult ??
>See my post if you missed it.
I didn't make it difficult, and I did see your post. Do please modify your code to accept "::" as a delimiter to see where I was going with my class. ;)

Hi all thanks a lot. i managed to modify it as follows.it worked.
int main()
{
string str = "0x0002,A5651QPR87GBZ094RTF52,D,A,000001,ABC ,10000.00 , EOT";

stringstream stream;
stream<<str
}

I am having some warning when im using strtok.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.