string methods hard time

This is a discussion on string methods hard time within the C++ Programming forums, part of the General Programming Boards category; Hello people, can anyone explain me why output from this program Code: #include <iostream> #include <string> using namespace std; int ...

  1. #1
    Registered User Micko's Avatar
    Join Date
    Nov 2003
    Posts
    712

    string methods hard time

    Hello people,
    can anyone explain me why output from this program
    Code:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str = "This is, you shouldn't see this, just a test!";
    	string :: size_type start, end;
    	string delim = ",";
    
    	start = str.find(delim);
    	if (start == string::npos)
    	{
    		return 0;
    	}
    	end = str.find(delim, start+delim.length());
    	str.erase(start, end+delim.length());
    	cout << str;
    	return 0;
    }
    is: "This is test!"(without quotes)?
    I expected that characters between ',' (including them) would be removed.
    Gotta love the "please fix this for me, but I'm not going to tell you which functions we're allowed to use" posts.
    It's like teaching people to walk by first breaking their legs - muppet teachers! - Salem

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    22,264
    The reason is that the erase() member function of std::string usually uses iterators. In your case, you are using the version that is index-based. This version takes a starting index, followed by the number of characters to erase.

    You could simply switch to the iterator version:
    Code:
    str.erase(str.begin() + start, str.begin() + end + delim.length());
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  3. #3
    Registered User Micko's Avatar
    Join Date
    Nov 2003
    Posts
    712
    Or to use this:
    Code:
    str.erase(start, end+delim.length()-start);
    Thanks laserlight, I didn't pay attention when reading documentation.
    Gotta love the "please fix this for me, but I'm not going to tell you which functions we're allowed to use" posts.
    It's like teaching people to walk by first breaking their legs - muppet teachers! - Salem

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. C++ FTP class won't work
    By lord mazdak in forum C++ Programming
    Replies: 8
    Last Post: 12-18-2005, 07:57 AM
  2. Another overloading "<<" problem
    By alphaoide in forum C++ Programming
    Replies: 18
    Last Post: 09-30-2003, 11:32 AM
  3. The Timing is incorret
    By Drew in forum C++ Programming
    Replies: 5
    Last Post: 08-28-2003, 05:57 PM
  4. lvp string...
    By Magma in forum C++ Programming
    Replies: 4
    Last Post: 02-27-2003, 12:03 AM
  5. How to decrease a time string by a given value
    By Ruchikar in forum C Programming
    Replies: 3
    Last Post: 04-11-2002, 01:08 PM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21