473,395 Members | 1,689 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,395 software developers and data experts.

problem with removing spaces in the string

Hi,

Suppose I have a string like this:

"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"

In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?

regards

Sep 19 '07 #1
11 3029
ramu wrote:
Suppose I have a string like this:

"I have a string \"and a inner string\\\" I want to remove
space in this string but not in the inner string"

In the above string I have to remove spaces, but not in the
inner string(\"and a inner string\\\"). Will anyone please
tell me how to do this?
No problem. I suppose you have an input like

char s[] = "I have a string \"and a inner string\\\" I want"
" to remove space in this string but not in the "
"inner string";

Just start removing spaces while you walk through the string;
whenever you see a '"' suspend the space removal and when you
see another '"' resume it. Don't forget to stop at the end of
the string.

Ralf
Sep 19 '07 #2
"ramu" writes:
Suppose I have a string like this:

"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"

In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?
Set a flag indicating you have encountered the first delimiter. Think of one
or more _states_. Search for information on modes and states and state
diagrams if you still have trouble.
Sep 19 '07 #3
On Sep 19, 12:16 pm, "osmium" <r124c4u...@comcast.netwrote:
"ramu" writes:
Suppose I have a string like this:
"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"
In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?

Set a flag indicating you have encountered the first delimiter. Think of one
or more _states_. Search for information on modes and states and state
diagrams if you still have trouble.
I have done like this:
char *strrmspace (char *s )
{
char *sptr = s;
char *instr = s;
char *outstr;
int i = 0;
boolean found_quote = FALSE;

outstr = (char * )malloc(strlen(s)+1);

while ( *instr != '\0')
{
if ( found_quote )
{
outstr[i++] = *instr;
}
else
{
if ( !isspace( *instr) )
{
outstr[i++] = *instr;
}
}

if (( *instr == '"') && ( instr[-1] != '\\'))
{
found_quote = !found_quote;
}
instr++;
} /* while */
outstr[i] = '\0';
(void)strcpy(s, outstr);
free (outstr);
return(sptr);
} /* strrmspace */

And if I have a string

char s[] = "I have a string \"\\\" I want to remove space in this
string but not in the \"inner string\" ";

But this is removing spaces in \"inner string\" when there is
backslash in the previous inner string ie. \"\\\".
I don't want to remove the spaces in the inner strings. How can I
achieve this?

regards
Sep 19 '07 #4
In article <11**********************@22g2000hsm.googlegroups. com>,
ramu <ra******@gmail.comwrote:
>Suppose I have a string like this:
>"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"
>In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?
Incomplete specification.
- Do inner strings nest?
- why is the ending delimeter for the inner string \\\" instead
of \" ? What should happen if a \" appears in the inner string?
--
Okay, buzzwords only. Two syllables, tops. -- Laurie Anderson
Sep 19 '07 #5
"ramu" wrote:
I have done like this:
char *strrmspace (char *s )
{
char *sptr = s;
char *instr = s;
char *outstr;
int i = 0;
boolean found_quote = FALSE;

outstr = (char * )malloc(strlen(s)+1);

while ( *instr != '\0')
{
if ( found_quote )
{
outstr[i++] = *instr;
}
else
{
if ( !isspace( *instr) )
{
outstr[i++] = *instr;
}
}

if (( *instr == '"') && ( instr[-1] != '\\'))
{
found_quote = !found_quote;
}
instr++;
} /* while */
outstr[i] = '\0';
(void)strcpy(s, outstr);
free (outstr);
return(sptr);
} /* strrmspace */

And if I have a string

char s[] = "I have a string \"\\\" I want to remove space in this
string but not in the \"inner string\" ";
See, I don't know what the word this applies to. We are not communicating.
Furthermore, I don't *want* to know. You have to have rigorous definitions
to have conversations such as the one you are attempting.
But this is removing spaces in \"inner string\" when there is
backslash in the previous inner string ie. \"\\\".
I don't want to remove the spaces in the inner strings. How can I
achieve this?
The link is not very good but it might help. This is a very simple thing
but it is almost impossible to describe without the ability to make
drawings. You have states and there are certain characters, sometimes
called terminals, that change the state, perhaps the quote or left slash in
your example. Or perhaps both, I didn't try to follow the details of what
you want. You can have an unlimited number of states. There is no
requirement for any kind of symmetry in a state diagram, simple examples
might give you that impression. You might also look up meta-language. I
think you are using quote and left backslash as a meta language in your
posts.
http://en.wikipedia.org/wiki/State_diagram
Sep 19 '07 #6

"ramu" <ra******@gmail.comwrote in message
news:11**********************@k79g2000hse.googlegr oups.com...
On Sep 19, 12:16 pm, "osmium" <r124c4u...@comcast.netwrote:
>"ramu" writes:
Suppose I have a string like this:
"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"
In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?

Set a flag indicating you have encountered the first delimiter. Think of
one
or more _states_. Search for information on modes and states and state
diagrams if you still have trouble.

I have done like this:
char *strrmspace (char *s )
{
char *sptr = s;
char *instr = s;
char *outstr;
int i = 0;
boolean found_quote = FALSE;

outstr = (char * )malloc(strlen(s)+1);

while ( *instr != '\0')
{
if ( found_quote )
{
outstr[i++] = *instr;
}
else
{
if ( !isspace( *instr) )
{
outstr[i++] = *instr;
}
}

if (( *instr == '"') && ( instr[-1] != '\\'))
{
found_quote = !found_quote;
}
instr++;
} /* while */
outstr[i] = '\0';
(void)strcpy(s, outstr);
free (outstr);
return(sptr);
} /* strrmspace */

And if I have a string

char s[] = "I have a string \"\\\" I want to remove space in this
string but not in the \"inner string\" ";

But this is removing spaces in \"inner string\" when there is
backslash in the previous inner string ie. \"\\\".
I don't want to remove the spaces in the inner strings. How can I
achieve this?

regards

When you encounter a quote, check the previous character to see
whether that quote is escaped or not.
--
Fred L. Kleinschmidt
Boeing Associate Technical Fellow
Aero Stability and Controls Computing
Sep 19 '07 #7
On Sep 19, 2:13 pm, rober...@ibd.nrc-cnrc.gc.ca (Walter Roberson)
wrote:
In article <1190217378.900611.188...@22g2000hsm.googlegroups. com>,

ramu <ramu....@gmail.comwrote:
Suppose I have a string like this:
"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"
In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?

Incomplete specification.
- Do inner strings nest?
- why is the ending delimeter for the inner string \\\" instead
of \" ? What should happen if a \" appears in the inner string?
--
Okay, buzzwords only. Two syllables, tops. -- Laurie Anderson
No. inner strings do not nest. But inner strings can contain one or
more double quote and/or one or more back slash.
The delimiter is double quote and \\ is the part of the inner
string.

The user input might be like this:

"I have a string "\\" I want to remove space in
this "string but not in the" "\"" inner string"

Regards

Sep 19 '07 #8
On Wed, 19 Sep 2007 08:56:18 -0700, ramu wrote:
Hi,

Suppose I have a string like this:

"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"

In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?
Use a status variable, initialized to (e.g. 0). Loop through the
source. If a character is whitespace, copy it only if the status
is 0. If it is a quotation mark, toggle the status, and copy it
to the target. Else, copy it to the target. A switch statement in
a loop will do that.
--
Army1987 (Replace "NOSPAM" with "email")
If you're sending e-mail from a Windows machine, turn off Microsoft's
stupid “Smart Quotes” feature. This is so you'll avoid sprinkling garbage
characters through your mail. -- Eric S. Raymond and Rick Moen

Sep 19 '07 #9
On Wed, 19 Sep 2007 09:53:54 -0700, ramu <ra******@gmail.comwrote:
>On Sep 19, 12:16 pm, "osmium" <r124c4u...@comcast.netwrote:
>"ramu" writes:
Suppose I have a string like this:
"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"
In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?

Set a flag indicating you have encountered the first delimiter. Think of one
or more _states_. Search for information on modes and states and state
diagrams if you still have trouble.

I have done like this:
Not a bad first effort.
>char *strrmspace (char *s )
Unfortunately, you have chosen a reserved name for your function.
>{
char *sptr = s;
char *instr = s;
char *outstr;
int i = 0;
boolean found_quote = FALSE;

outstr = (char * )malloc(strlen(s)+1);
Don't cast the return from malloc. It can never help but can lead to
silencing a diagnostic you would really want to see.
>
while ( *instr != '\0')
{
if ( found_quote )
{
outstr[i++] = *instr;
}
else
{
if ( !isspace( *instr) )
isspace returns true for characters other than ' '.
{
outstr[i++] = *instr;
}
}

if (( *instr == '"') && ( instr[-1] != '\\'))
This will cause undefined behavior if a " is the first character of
the input string.
{
found_quote = !found_quote;
}
instr++;
} /* while */
outstr[i] = '\0';
(void)strcpy(s, outstr);
Why the cast?
free (outstr);
return(sptr);
sptr was set to s and neither was ever modified. It looks like you
don't need sptr and can return s. return is a statement, not a
function; the parentheses are unnecessary.
>} /* strrmspace */

And if I have a string

char s[] = "I have a string \"\\\" I want to remove space in this
string but not in the \"inner string\" ";

But this is removing spaces in \"inner string\" when there is
backslash in the previous inner string ie. \"\\\".
I don't want to remove the spaces in the inner strings. How can I
achieve this?
It would avoid ambiguity if you would specify the desired output after
processing the above array and show us the output your function is
producing.

One problem you may think you have is that the \" you see after the
first word string is not two characters at execution time. It is
acutely the start of your inner string which continues until the \"
before the word inner. The phrase inner string is part of your outer
string and should be stripped.
Remove del for email
Sep 20 '07 #10

"ramu" <ra******@gmail.comwrote in message
news:11**********************@22g2000hsm.googlegro ups.com...
Hi,

Suppose I have a string like this:

"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"

In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?
If you still haven't found a solution, please write:

1) A sample string, as typed by the user.
2) The same string, according to the C syntax.
3) The processed string, in C syntax.
4) The processed string, as written to the console.

Do you confirm that the START of the *inner string*
is marked by \" ?

Do you confirm that the END of the *inner string*
is marked by \" ?

Or what?

Sep 20 '07 #11
ramu wrote:
On Sep 19, 2:13 pm, rober...@ibd.nrc-cnrc.gc.ca (Walter Roberson)
wrote:
>In article <1190217378.900611.188...@22g2000hsm.googlegroups. com>,

ramu <ramu....@gmail.comwrote:
>>Suppose I have a string like this:
"I have a string \"and a inner string\\\" I want to remove space in
this string but not in the inner string"
In the above string I have to remove spaces, but not in the inner
string(\"and a inner string\\\"). Will anyone please tell me how to do
this?
Incomplete specification.
- Do inner strings nest?
- why is the ending delimeter for the inner string \\\" instead
of \" ? What should happen if a \" appears in the inner string?
--
Okay, buzzwords only. Two syllables, tops. -- Laurie Anderson

No. inner strings do not nest. But inner strings can contain one or
more double quote and/or one or more back slash.
The delimiter is double quote and \\ is the part of the inner
string.

The user input might be like this:

"I have a string "\\" I want to remove space in
this "string but not in the" "\"" inner string"
I assume that an inner string has the same syntax as a C string literal.
If not, please show exactly how they differ. If so, then the inner
string may represent \ and " characters by escaping them with the
sequences \\ and \". It is important to note that within string
literals a series of \s are paired:
"\\\\"
is a string literal containing \\, not the beginning of one containing
an escaped quote.

I try here to separate the actual characters in an array with the
representation as a string literal.

Start with
<string>the "bad" boys</string>
having 14 characters, where <stringand </stringare the delimiters of
a sequence of characters (to reduce confusion).

C string literal (which is a string of characters) containing those
characters:
<string>"the \"bad\" boys"</string>
has 18 characters.

A character string containing the above string literal:
<string>I saw "the \"bad\" boys" yesterday.</string>

If you give that string as input to your program, I assume you want the
output to be
<string>Isaw"the \"bad\" boys"yesterday.</string>,
but without the outside delimiters.

You could read the input string shown above, without the outside
delimiters, from an input stream.

If you wanted to represent the input as a string literal for testing,
you would code
char s[] = "I saw \"the \\\"bad\\\" boys\" yesterday.";

Your earlier example:
char s[] = "I have a string \"\\\" I want to remove space in this
string but not in the \"inner string\" ";

is a representation of the character sequence
<string>I have a string "\" I want to remove space in this
string but not in the "inner string" </string>

Using my assumed definition of inner string, the inner strings are
<string>\" I want to remove space in this string but not in the </string>
and the unterminated inner string
<string</string>
at the very end of the subject string.

Is that what you intend?

--
Thad
Sep 21 '07 #12

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

9
by: hokiegal99 | last post by:
This script works as I expect, except for the last section. I want the last section to actually remove all spaces from the front and/or end of filenames. For example, a file that was named " test ...
11
by: gopal srinivasan | last post by:
Hi, I have a text like this - "This is a message containing tabs and white spaces" Now this text contains tabs and white spaces. I want remove the tabs and white...
12
by: Magix | last post by:
Hi, Everytime I received a fix-length of string, let say 15 (the unused portion will filled with Spaces before receive), I want to remove the Spaces from END until I encounter a non-space char....
1
by: Mike in Paradise | last post by:
Is there a more effcient way of removing the spaces from the names for a Enumerated value that has several values when you split it)??? When you do a toString it puts ,<SPACE> between the entries...
3
by: lino | last post by:
Hello, I have the following string: const char plaintext = "Fourscore and seven years ago our \ fathers brought forth upon this continent \ a new nation, conceived in liberty, and dedicated...
4
by: nik | last post by:
hello friends, i want to create a file and copy that file removing white spaces in the file; for ex a file : C:\\abcd.txt contents of file r: a b c d e. i want to remove white spaces...
8
by: starsky51 | last post by:
I'm sure it's something i'm doing wrong, I just can't see it. I've set up a simple page with the following code: <html> <head> <title>tester</title> <script language="javascript"...
2
by: David | last post by:
Sent this to alt.php a couple of days back, but doesn't look like I'll get an answer, so trying here. I'm trying to convert a script to use friendly URLs, I've done this before, but my PHP...
2
code green
by: code green | last post by:
I am trying to write a simple function that will take a string containing an address line or business name and return it nicely formatted. By this I mean extra spaces removed and words capitalised....
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.