strip commas from string

I

ineedyourluvin1

Hello all! I've been looking for a way to strip characters from strings
such as a comma. This would be great for using a comma
as a delimiter. I show you what I have right now.


#include<iostream>
#include<string>

int main(int argc, char *argv[])
{
using namespace std ;

char people[14] = "Me,Myself,I" ;
char nocommas[14] ;
int i, j ;
i=j=0 ;





for(i = 0; i < 14; i++){
if(people != ',')
nocommas = people ;

if(people == ',')
nocommas = ' ' ;
}



cout << "With commas : " << people << endl ;
cout << "Without commas : " << nocommas << endl ;

cout << "\n\n\n\n" ;
cout << "\tNow tell me how I can store each name in a separate
variable ?" << endl ;
cout << "\tAnd can someone show me how to do this with string instead
of char[] ?" << endl ;
cout << "\t\t Thanks so much!" << endl ;

return 0 ;
}


so as you can see it strips commas and puts a space in its place.

Thanks for you help :)
 
T

Thomas Matthews

Hello all! I've been looking for a way to strip characters from strings
such as a comma. This would be great for using a comma
as a delimiter. I show you what I have right now.

Thank you for posting code. This really helps.
#include<iostream>
#include<string>
You're not using std::string. So you _may_ not need
this header.

int main(int argc, char *argv[])
{
using namespace std ;

char people[14] = "Me,Myself,I" ;
char nocommas[14] ;
int i, j ;
i=j=0 ;





for(i = 0; i < 14; i++){
if(people != ',')
nocommas = people ;

if(people == ',')
nocommas = ' ' ;
}



cout << "With commas : " << people << endl ;
cout << "Without commas : " << nocommas << endl ;

cout << "\n\n\n\n" ;
cout << "\tNow tell me how I can store each name in a separate
variable ?" << endl ;
cout << "\tAnd can someone show me how to do this with string instead
of char[] ?" << endl ;
cout << "\t\t Thanks so much!" << endl ;

return 0 ;
}


so as you can see it strips commas and puts a space in its place.

Thanks for you help :)


1. See std::string class, especially the constructor:
std::string(char *)
So that you can use the find() member of the string class.

2. Also explore the strtok() and strchr() functions in the
"C" standard library.

--
Thomas Matthews

C++ newsgroup welcome message:
http://www.slack.net/~shiva/welcome.txt
C++ Faq: http://www.parashift.com/c++-faq-lite
C Faq: http://www.eskimo.com/~scs/c-faq/top.html
alt.comp.lang.learn.c-c++ faq:
http://www.comeaucomputing.com/learn/faq/
Other sites:
http://www.josuttis.com -- C++ STL Library book
http://www.sgi.com/tech/stl -- Standard Template Library
 
A

Alipha

Hello all! I've been looking for a way to strip characters from strings
such as a comma. This would be great for using a comma
as a delimiter. I show you what I have right now.
cout << "\n\n\n\n" ;
cout << "\tNow tell me how I can store each name in a separate
variable ?" << endl ;
cout << "\tAnd can someone show me how to do this with string instead
of char[] ?" << endl ;
cout << "\t\t Thanks so much!" << endl ;

return 0 ;
}

to store "each name in a separate variable" you'll want a std::vector,
another container, or perhaps an array.

to split the string based upon commas, you can put the string in a
std::stringstream and then use std::getline:

std::istringstream ss("I,Myself,Me");
std::string name;
while(std::getline(ss, name, ',') {
/* push_back name onto the end of a std::vector or another container
*/
}
 
L

Larry I Smith

Hello all! I've been looking for a way to strip characters from strings
such as a comma. This would be great for using a comma
as a delimiter. I show you what I have right now.


#include<iostream>
#include<string>

int main(int argc, char *argv[])
{
using namespace std ;

char people[14] = "Me,Myself,I" ;
char nocommas[14] ;
int i, j ;
i=j=0 ;





for(i = 0; i < 14; i++){
if(people != ',')
nocommas = people ;

if(people == ',')
nocommas = ' ' ;
}



cout << "With commas : " << people << endl ;
cout << "Without commas : " << nocommas << endl ;

cout << "\n\n\n\n" ;
cout << "\tNow tell me how I can store each name in a separate
variable ?" << endl ;
cout << "\tAnd can someone show me how to do this with string instead
of char[] ?" << endl ;
cout << "\t\t Thanks so much!" << endl ;

return 0 ;
}


so as you can see it strips commas and puts a space in its place.

Thanks for you help :)


Here's one possibility:


#include <iostream>
#include <sstream>
#include <string>
#include <list>

int main(int argc, char *argv[])
{
// the test string of comma-seperated words
char * people = "Me,Myself,I";

// make an input stream named 'in' from 'people'
std::istringstream in(people);

// 'words' will hold the list of words extracted from 'in'
std::list< std::string > words;

// while no error on 'in'
while(in)
{
// 'aWord' will hold the next word read from 'in'
std::string aWord;

// get all text from 'in' up to the next comma, or end of data,
// into 'aWord'
getline(in, aWord, ',');

// if no error on 'in', i.e. we read text into 'aWord',
// then put a copy of 'aWord' in to the 'words' list
if (in)
words.push_back(aWord);
}

std::cout << "Comma seperated words read from 'people' into the
'words' list"
<< std::endl;

// 'it' is an iterator for iterating over the content of the
// 'words' list
std::list< std::string >::iterator it;

// print all of the entries in 'words'
for (it = words.begin(); it != words.end(); it++)
std::cout << (*it) << std::endl;

return 0;
}

Regards,
Larry
 
S

Sebastian Hungerecker

Hello all! I've been looking for a way to strip characters from strings
such as a comma. This would be great for using a comma
as a delimiter. I show you what I have right now.

I'm pretty new to C++ myself (I started learning two or three weeks
ago), so this is probably not the cleanest (or best) way to do this,
but it works - for me anyway (it compiles with g++ -Wall -ansi -pedantic
without any warnings, so it should probably work everwhere else, too).

I stayed pretty close to the code you already had, so you shouldn't have
any problems understanding it.


#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char **argv) {
string commas="Me,Myself,I";
if(argv[1]) commas=argv[1]; // Use commandline parameter as string
// if specified.
vector<string> nocommas(1);
int j=0;
for(unsigned int i=0; i<commas.length(); i++) {
if(commas==',') { // If the current character is a comma,
nocommas.push_back(""); // add a new (empty) string to the vector
j++; // and increase the counter so that all
// future operations are performed on
the
// new string
}
else nocommas.at(j)+=commas; // If it's not add the current char
// to the string with the number j
// in the vector
}
cout<<"With commas: "<<commas<<endl<<endl;
cout<<"From the array:"<<endl;
for(int i=0; i<=j; i++) {
cout<<"Word "<<i<<": "<<nocommas.at(i)<<endl;
}
return 0;
}
 
I

ineedyourluvin1

Larry, why use std:: all the time? You can just put 'using namespace
std' at the beginning of your code :)
 
L

Larry I Smith

Larry, why use std:: all the time? You can just put 'using namespace
std' at the beginning of your code :)

That can get you in trouble.
In a small program like this it's ok, but it can cause
unexpected problems in large apps where name conflicts
might occur with methods from other (3rd party) libs.

I explicitly use 'std::' in example programs so the reader
will be clear on where things come from in the example.

Regards,
Larry
 
L

Larry I Smith

Larry said:
That can get you in trouble.
In a small program like this it's ok, but it can cause
unexpected problems in large apps where name conflicts
might occur with methods from other (3rd party) libs.

I explicitly use 'std::' in example programs so the reader
will be clear on where things come from in the example.

Regards,
Larry


For completeness, this line in my example:

getline(in, aWord, ',');

should be:

std::getline(in, aWord, ',');

In the absence of a "using namespace std;" declaration,
some compilers will compile the example ok, but some
will complain about not being able to find the appropriate
getline() function.

Regards,
Larry
 
L

Larry I Smith

Larry said:
That can get you in trouble.
In a small program like this it's ok, but it can cause
unexpected problems in large apps where name conflicts
might occur with methods from other (3rd party) libs.

I explicitly use 'std::' in example programs so the reader
will be clear on where things come from in the example.

Regards,
Larry


For completeness, this line in my example:

getline(in, aWord, ',');

should be:

std::getline(in, aWord, ',');

In the absence of a "using namespace std;" declaration,
some compilers will compile the example ok, but some
will complain about not being able to find the appropriate
getline() function.

Regards,
Larry
 
I

ineedyourluvin1

That can get you in trouble.
In a small program like this it's ok, but it can cause
unexpected problems in large apps where name conflicts
might occur with methods from other (3rd party) libs.

Ok Larry, I see now. You know I learn way more in the news groups
than I do from a text book ! By the way as far as text books go,
I'm studying from the Pearson Textbook series , C++ Today and C++
Primer.
They're good books but have me starting my progs with using namespace
and
sticking with char[] instead of string alot. And to sebastian, Alipha,
and Thomas ,
I appreciate your help too ! Larry, I never knew that putting 'Using
namespace whatever'
would get me into trouble until you demonstrated it to me in this
forum. From now
on I'm going to append std:: to all my std library functions and
objects.
I had to say all that to demonstrate my appreciation ... Thanks
 
L

Larry I Smith

That can get you in trouble.
In a small program like this it's ok, but it can cause
unexpected problems in large apps where name conflicts
might occur with methods from other (3rd party) libs.

Ok Larry, I see now. You know I learn way more in the news groups
than I do from a text book ! By the way as far as text books go,
I'm studying from the Pearson Textbook series , C++ Today and C++
Primer.
They're good books but have me starting my progs with using namespace
and
sticking with char[] instead of string alot. And to sebastian, Alipha,
and Thomas ,
I appreciate your help too ! Larry, I never knew that putting 'Using
namespace whatever'
would get me into trouble until you demonstrated it to me in this
forum. From now
on I'm going to append std:: to all my std library functions and
objects.
I had to say all that to demonstrate my appreciation ... Thanks

The use of 'using namespace std;' versus explicit 'std::' is a decision
that needs to be made on a project-by-project basis. If you are not
linking with multiple libs and the project is small, then the 'using'
declaration is fine. If the project is large and you are linking
with multiple libs then explicit use of 'std::' might be a better
option. Most IT departments have some kind of guidelines for their
developers spelling out the corporation's C++ standards. It just
happens that my employer expects the use of 'std::' in all but the
most trivial programs.

Like anything else, do what makes sense for the particular project.

Regards,
Larry
 
I

ineedyourluvin1

What do you mean by linking with multiple libs ? You mean like if I
want to use
ncurses in a Linux program I would link more than one lib by doing :

mycomp$> gcc -o ncursesprog ncursesprog.cpp -lncurses

By putting the -lncurses I would be linking with more than one lib then
?
 
L

Larry I Smith

What do you mean by linking with multiple libs ? You mean like if I
want to use
ncurses in a Linux program I would link more than one lib by doing :

mycomp$> gcc -o ncursesprog ncursesprog.cpp -lncurses

By putting the -lncurses I would be linking with more than one lib then
?

In general, yes -lncurses causes an additional lib to be linked
in addition to the Std libs that are linked by default.

Always use 'g++' rather than 'gcc' to compile and link C++
programs. g++ passes additional info to the linker specific
to C++ programs (like the list of Std libs to link, etc). e.g.

g++ -o ncursesprog ncursesprog.cpp -lncurses

Use 'gcc' for 'C' programs and 'g++' for C++ and mixed
'C' & C++ programs.

The newsgroup for GCC 'gcc' is: gnu.gcc.help
The newsgroup for GCC 'g++' is: gnu.g++.help

Regards,
Larry
 
?

=?ISO-8859-15?Q?Juli=E1n?= Albo

Larry said:
The use of 'using namespace std;' versus explicit 'std::' is a decision
that needs to be made on a project-by-project basis. If you are not

What do you mean? Do you think is reasonable in any project to force to use
a "using namespace std" in all translation units? Or to put in in header
files? If it is that, I don't think that nobody will agree with that.

Unless the project is sooooo small that nobody cares about his maintenance,
of course.
 
L

Larry I Smith

Julián Albo said:
What do you mean? Do you think is reasonable in any project to force to use
a "using namespace std" in all translation units? Or to put in in header
files? If it is that, I don't think that nobody will agree with that.

Unless the project is sooooo small that nobody cares about his maintenance,
of course.

No, In fact, we never use 'using namespace std;', but in a very small
program, like the example code in this thread, it's ok.

Regards,
Larry
 
I

ineedyourluvin1

So what would be the std libs I can link with ? I mean is there a such
thing as iostream.lib ? I did a harddrive search and nothing like that
was found. I would like to know. By the way Larry, I type in the
example
program you added to this thread which separated words and used
the header files sstream and list. Here's the output I got

Comma separated words read from 'people' into the 'words' list
me
myself
i

I like the way they list one underneath the other like that . In any
case I'm
going to need practice using headers list and sstream. So much to
learn!

Sincerelly,

Me
 
L

Larry I Smith

So what would be the std libs I can link with ? I mean is there a such
thing as iostream.lib ? I did a harddrive search and nothing like that
was found. I would like to know.
[snip]

Me

The Std lib names vary from platform to platform.
Consult your compiler and Operating System documentation
for details.

For example, on my Linux system, the C++ Std lib is:

libstdc++.so.5.0.

and is passed to the linker by 'g++' as '-lstdc++'

It'll be different on Windows, Solaris, HP-UX, AIX, etc.
Different libs may be linked based on compiler flags:

compile multi-threaded yes/no
compile debug yes/no
use Network sockets yes/no
etc, etc, etc

Ask additional question in the newsgroup(s) associated
with your compiler and Operating System.

Regards,
Larry
 
P

Peter Koch Larsen

Hello all! I've been looking for a way to strip characters from strings
such as a comma. This would be great for using a comma
as a delimiter. I show you what I have right now.


[snip]


so as you can see it strips commas and puts a space in its place.

Thanks for you help :)
If you want to replace commas with spaces simply do:
std::string s;

s.replace(s.begin(),s.end(),',',' ');

if you want ro remove commas use:

std::string s;

s.erase(std::remove(s.begin(),s.end(),','),s.end());

You can use similar code for char* strings.



/Peter
 
R

Ram

Yes, using std::string functions is the most recommended & convenient
way. You might find it useful to explore other std::string functions,
there's one for almost every common task associated with a string.

Ramashish
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,571
Members
45,045
Latest member
DRCM

Latest Threads

Top