By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,617 Members | 1,792 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,617 IT Pros & Developers. It's quick & easy.

strip commas from string

P: n/a

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[i] != ',')
nocommas[i] = people[i] ;

if(people[i] == ',')
nocommas[i] = ' ' ;
}

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 :-)

Jul 30 '05 #1
Share this Question
Share on Google+
22 Replies


P: n/a
in*************@yahoo.com wrote:
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[i] != ',')
nocommas[i] = people[i] ;

if(people[i] == ',')
nocommas[i] = ' ' ;
}

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

Jul 30 '05 #2

P: n/a
> 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
*/
}

Jul 30 '05 #3

P: n/a
in*************@yahoo.com wrote:
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[i] != ',')
nocommas[i] = people[i] ;

if(people[i] == ',')
nocommas[i] = ' ' ;
}

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
Jul 30 '05 #4

P: n/a
in*************@yahoo.com wrote:
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[i]==',') { // 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[i]; // 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;
}

--
If geiger counter does not click,
the coffee, she is just not thick
Jul 30 '05 #5

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

Jul 30 '05 #6

P: n/a
in*************@yahoo.com wrote:
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

Jul 30 '05 #7

P: n/a
Larry I Smith wrote:
in*************@yahoo.com wrote:
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

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
Jul 30 '05 #8

P: n/a
>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

Jul 30 '05 #9

P: n/a
in*************@yahoo.com wrote:
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
Jul 30 '05 #10

P: n/a
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
?

Jul 30 '05 #11

P: n/a
in*************@yahoo.com wrote:
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
Jul 30 '05 #12

P: n/a
Larry I Smith wrote:
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.

--
Salu2
Jul 30 '05 #13

P: n/a
Julián Albo wrote:
Larry I Smith wrote:
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.


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
Jul 30 '05 #14

P: n/a
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

Jul 30 '05 #15

P: n/a
in*************@yahoo.com wrote:
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
Jul 30 '05 #16

P: n/a

<in*************@yahoo.com> skrev i en meddelelse
news:11**********************@g43g2000cwa.googlegr oups.com...

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
Jul 31 '05 #17

P: n/a
Wow that really makes it easy :-) Thanks Peter!

Jul 31 '05 #18

P: n/a
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

Jul 31 '05 #19

P: n/a
Hello there,

The following snippet may be useful;
char s[10];
...
...
for (i=0,s[i]=strtok(input,",");s[i]!=NULL;s[i]=strtok(NULL,","),i++)
printf("String i --> %s \n",s[i]);
...
...

/Rajesh

in*************@yahoo.com wrote:
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[i] != ',')
nocommas[i] = people[i] ;

if(people[i] == ',')
nocommas[i] = ' ' ;
}

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 :-)


Aug 1 '05 #20

P: n/a
SUNROCKET FREE PHONES HERE
SunRocket Promotion Free Phones!
http://sunrocket.blogspot.com
[b:adb10dde8a][color=red:adb10dde8a]SUNROCKET BLOG
Recieve two FREE Uniden Cordless
phones[/color:adb10dde8a][/b:adb10dde8a]

http://img461.imageshack.us/img461/4...ketnew25ub.jpg
Sent via Archivaty.com
Nov 22 '05 #21

P: n/a
SUNROCKET FREE PHONES HERE
SunRocket Promotion Free Phones!
http://sunrocket.blogspot.com
[b:0a2b1f0e20][color=red:0a2b1f0e20]SUNROCKET BLOG
Recieve two FREE Uniden Cordless
phones[/color:0a2b1f0e20][/b:0a2b1f0e20]

http://img461.imageshack.us/img461/4...ketnew25ub.jpg
Sent via Archivaty.com
Nov 22 '05 #22

P: n/a

"SUNROCKET" <RE*******@MAILINATOR-dot-COM.no-spam.invalid> wrote in
message news:1N******************************@giganews.com ...

<snip>

for the record: ab***@giganews.com
and a full header + message was sent.

We don't need total idiots here. Specially an idiot that configures the
newsreader to only show unread messages. If you composed it, you've read
it, duh!
Nov 22 '05 #23

This discussion thread is closed

Replies have been disabled for this discussion.