469,646 Members | 1,218 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,646 developers. It's quick & easy.

capitalize words

string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron
Jul 21 '05 #1
10 2150
a = a.ToUpper();
http://msdn.microsoft.com/library/de...uppertopic.asp

HTH,

Bill
www.tibasolutions.com
"Aaron" <ku*****@yahoo.com> wrote in message
news:O6*************@TK2MSFTNGP11.phx.gbl...
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron

Jul 21 '05 #2
You could do a foreach through the string -- foreach (char c in a) -- or do
a for loop and use the string's indexer. Either way you can examine each
character that way and apply Char.ToUpper() to any character following
whitespace (Char.IsWhiteSpace()). You can't modify individual characters of
the string of course without creating a new string, which isn't efficient;
you might want to append each character to a StringBuilder and return the
StringBuilder's ToString() at the end of the routine. Or, it might be
faster to convert the string to a character array, tweak the necessary
characters, and then convert it back to a string at the end. Your mileage
will likely vary depending on typical string lengths.

Yet another approach might be to use the Split() method of string to turn it
into a string array of words, proper case each word, then put them back
together into a string. That is conceptually simple but may be too slow if
you're going to call this routine alot.

Finally, a regular expression could be constructed to do some or all of this
work.

--Bob

"Aaron" <ku*****@yahoo.com> wrote in message
news:O6*************@TK2MSFTNGP11.phx.gbl...
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron

Jul 21 '05 #3
If you're using VB.Net, check out the StrConv() function and its Conversion
argument. VbStrConv.ProperCase, according to the docs, capitalizes each word
of a string.

I'm not aware of a C# equivalent.

Tom Dacon
Dacon Software Consulting

"Aaron" <ku*****@yahoo.com> wrote in message
news:O6*************@TK2MSFTNGP11.phx.gbl...
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron

Jul 21 '05 #4
"Aaron" <ku*****@yahoo.com> wrote in
news:O6*************@TK2MSFTNGP11.phx.gbl:
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how
to capitalize every word in that string


Aaron,

As Tom Dacon pointed out, VB.Net has the StrConv function. What
isn't generally known is that all of those functions that appear to
be only callable from VB.Net can be called from any .Net language,
including C#:
// Add a reference to the Microsoft.VisualBasic.dll to your project.

// For .Net 1.0, it is located in
// C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705

// For .Net 1.1, it is located in
// C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
using System.Globalization;
using Microsoft.VisualBasic;

....

string a = "i have an apple";
Console.WriteLine(Strings.StrConv(a, VbStrConv.ProperCase,
CultureInfo.CurrentCulture.LCID));

--
Hope this helps.

Chris.
-------------
C.R. Timmons Consulting, Inc.
http://www.crtimmonsinc.com/
Jul 21 '05 #5
On Sat, 18 Sep 2004 15:51:56 -0700, Aaron wrote:
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string


Since strings are immutable (for a good reason), you can't say something
like:

a[idx] = Char.ToUpper(a[idx]);

Since this would modify the instance, the assignment can't be made.

You could, on the other hand, assign the variable a to a whole new string
instance (reference):

a = "new string";

However, you aren't actually changing the instance that a referenced before
-- you're simple "pointing" a to a new string instance.

The usual way to work around the immutability problem would be to create a
StringBuilder instance, modify it as desired then return a string from it:

StringBuilder sb = new StringBuilder(a);
sb[idx] = Char.ToUpper(sb[idx]);
a = sb.ToString();

Since StringBuilder instances aren't immutable, you *can* modify them, as
shown.

In this case, though, I would probably just create a StringBuilder instance
and fill it up one character at a time:

/// <summary>
/// Return a copy of the specified string with the first character and
/// any characters following spaces, as upper-case.
/// </summary>
static string MakeIntoTitleCase(string val) {
StringBuilder sb = new StringBuilder();

for (int i = 0; i < val.Length; ++i){
if (i == 0 || val[i - 1] == ' ') {
sb.Append(Char.ToUpper(val[i]));
} else {
sb.Append(val[i]);
}
}

return sb.ToString();
}
Jul 21 '05 #6
On Sat, 18 Sep 2004 15:51:56 -0700, Aaron wrote:
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron


using System;
using System.Globalization;

class Test
{
public static void Main ()
{
string s =
CultureInfo.CurrentCulture.TextInfo.ToTitleCase ("i have an apple.");
Console.WriteLine (s);
}
}
--
Tom Shelton [MVP]
Jul 21 '05 #7
Is it possible to traverse the whole string, and when encountering a
space, set the next character to uppercase. With this method ,it must
be made sure that only once space exist between two words.

Maybe there is an easier way how to do it, then someone else will
post, and both of us will learn :)

"Aaron" <ku*****@yahoo.com> wrote in message news:<O6*************@TK2MSFTNGP11.phx.gbl>...
string a = "i have an apple";
i want the output to be "I Have An Apple";
i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron

Jul 21 '05 #8
"W.G. Ryan" <Wi**********@gmail.com> wrote in message
news:e7**************@TK2MSFTNGP15.phx.gbl...
a = a.ToUpper();
http://msdn.microsoft.com/library/de...uppertopic.asp


That will convert THE ENTIRE STRING TO UPPER CASE, Not Capitalise The First
Letter Of Each Word, which is what the OP requires...

Fortunately this is very easy in C#:

string strTitleCase =
System.Globalization.CultureInfo.CurrentCulture.Te xtInfo.ToTitleCase ("the
string to be converted");
Jul 21 '05 #9
Aaron,

When you use VBNet or import in the other languages the
Microsoft.VisualBasic namespace, you can use both these

Console.WriteLine(Globalization.CultureInfo.Curren tCulture.TextInfo.ToTitleC
ase("i have an apple."))
Console.WriteLine(StrConv("i have an apple.", VbStrConv.ProperCase))

(with C# closed by ;)

I hope this helps?

Cor
Jul 21 '05 #10
Yep, I should have read it more carefully. Thanks, Bill
"Mark Rae" <ma**@mark-N-O-S-P-A-M-rae.co.uk> wrote in message
news:e$**************@TK2MSFTNGP11.phx.gbl...
"W.G. Ryan" <Wi**********@gmail.com> wrote in message
news:e7**************@TK2MSFTNGP15.phx.gbl...
a = a.ToUpper();
http://msdn.microsoft.com/library/de...uppertopic.asp
That will convert THE ENTIRE STRING TO UPPER CASE, Not Capitalise The First Letter Of Each Word, which is what the OP requires...

Fortunately this is very easy in C#:

string strTitleCase =
System.Globalization.CultureInfo.CurrentCulture.Te xtInfo.ToTitleCase ("the
string to be converted");

Jul 21 '05 #11

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Laurence Nuttall | last post: by
1 post views Thread by Laurence Nuttall | last post: by
10 posts views Thread by Aaron | last post: by
1 post views Thread by Laurence Nuttall | last post: by
12 posts views Thread by jackson.rayne | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.