Formátumkaraktersorozat címformátumra

szavazat
24

Hogyan formázza egy string, címformátumra ?

A kérdést 03/08/2008 17:03
a forrás felhasználó
Más nyelveken...                            


18 válasz

szavazat
16

Itt van egy egyszerű statikus módszer, hogy ezt a C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Válaszolt 03/08/2008 17:05
a forrás felhasználó

szavazat
13

Lennék óvatos automatikusan upcasing összes szóközzel megelőzte-szava esetek, amikor azt a kockázattal jár, vonzza a düh a nitpickers.

Azt legalább fontolja meg egy szótárat kivétel esetekben, mint a cikkeket és kötőszavak. íme:

"Szépség és a szőrny"

És amikor a tulajdonnevek, a dolog lesz sokkal csúnyább.

Válaszolt 03/08/2008 20:10
a forrás felhasználó

szavazat
10

Itt egy Perl megoldás http://daringfireball.net/2008/05/title_case

Itt egy Ruby megoldás http://frankschmitt.org/projects/title-case

Itt egy Ruby egysoros megoldás: http://snippets.dzone.com/posts/show/4702

'some string here'.gsub(/\b\w/){$&.upcase}

Mi egysoros csinál, az egy szabályos kifejezést helyettesítése az első karakter minden egyes szót a nagybetűs változatát is.

Válaszolt 03/08/2008 19:22
a forrás felhasználó

szavazat
8

Ahhoz capatilise azt mondjuk, C - használja az ASCII kódok ( http://www.asciitable.com/ ), hogy megtalálja egy egész értéket a char és kivonni 32 belőle.

Ez egy rossz megoldás, ha úgy tervezi, hogy elfogadja karakterek túl az és AZ.

Például: ASCII 134: a, ASCII 143 nm-t.
Segítségével számtani érheti el: ASCII 102: f

Használja függvényhívásokról, nem feltételezzük, akkor használja aritmetika a karakterek, hogy újra valami hasznos. Unicode trükkös .

Válaszolt 04/08/2008 22:16
a forrás felhasználó

szavazat
6

A Java, akkor a következő kódot.

public String titleCase(String str) {
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        if (i == 0) {
            chars[i] = Character.toUpperCase(chars[i]);
        } else if ((i + 1) < chars.length && chars[i] == ' ') {
            chars[i + 1] = Character.toUpperCase(chars[i + 1]);
        }
    }
    return new String(chars);
}
Válaszolt 02/03/2016 10:32
a forrás felhasználó

szavazat
6

A Silverlight nincs ToTitleCasea TextInfokategóriában.

Íme egy egyszerű regex alapú módon.

Megjegyzés: Silverlight nincs előre lefordított regexes, de nekem ez a teljesítmény veszteség nem okoz problémát.

    public string TitleCase(string str)
    {
        return Regex.Replace(str, @"\w+", (m) =>
        {
            string tmp = m.Value;
            return char.ToUpper(tmp[0]) + tmp.Substring(1, tmp.Length - 1).ToLower();
        });
    }
Válaszolt 09/06/2010 05:24
a forrás felhasználó

szavazat
5

Perl-ben

$string =~ s/(\w+)/\u\L$1/g;

Ez még a FAQ.

Válaszolt 29/09/2008 23:35
a forrás felhasználó

szavazat
5

Ha a nyelv használata egy támogatott módszer / funkció, akkor csak használni, hogy (mint a C # ToTitleCasemódszer)

Ha nem, akkor akar tenni valamit, mint a következő:

  1. Olvassa el a húr
  2. Vegyük az első szó
  3. Betűvel, a szó 1
  4. Menj előre, és megtalálják a következő szó
  5. Ide 3, ha nem a végén a húr, különben kilép

1. Ahhoz, hogy aktiválja azt mondjuk, C - használja a ascii kódokat , hogy megtalálják a egész érték a char és kivonni 32 belőle.

Ott kellene lennie sokkal hibaellenőrzési a kódot (biztosítva érvényes levelek stb), és a „Tőkét” funkció kell előírni valamiféle „title-ügy rendszer” a betűk, hogy ellenőrizze a szavakat, amelyek nem igényelnek kell capatilised ( „és”, „de”, stb Itt egy jó rendszer)

Válaszolt 03/08/2008 17:33
a forrás felhasználó

szavazat
5

Milyen nyelven?

A PHP ez:

ucwords ()

példa:

$HelloWorld = ucwords('hello world');
Válaszolt 03/08/2008 17:12
a forrás felhasználó

szavazat
4

Excel-szerű MEGFELELŐ:

public static string ExcelProper(string s) {
    bool upper_needed = true;
    string result = "";
    foreach (char c in s) {
        bool is_letter = Char.IsLetter(c);
        if (is_letter)
            if (upper_needed)
                result += Char.ToUpper(c);
            else
                result += Char.ToLower(c);
        else
            result += c;
        upper_needed = !is_letter;
    }
    return result;
}
Válaszolt 02/03/2011 23:29
a forrás felhasználó

szavazat
2

http://titlecase.com/van egy API

Válaszolt 09/06/2010 05:09
a forrás felhasználó

szavazat
1

Itt egy egyszerű példa arra, hogyan kell csinálni:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Válaszolt 15/12/2017 11:54
a forrás felhasználó

szavazat
1

Itt van egy végrehajtási Python: https://launchpad.net/titlecase.py

És egy port ennek végrehajtására, hogy most történik C ++: http://codepad.org/RrfcsZzO

Válaszolt 19/11/2012 08:59
a forrás felhasználó

szavazat
1

Van egy beépített képlet PROPER(n)az Excel.

Nagyon elégedett volt, hogy nem kellett írni, hogy magam!

Válaszolt 09/06/2010 05:07
a forrás felhasználó

szavazat
1

Azt hiszem, a CultureInfo nem mindig megbízható, ez az egyszerű és praktikus módja annak, hogy manipulálni húr kézzel:

string sourceName = txtTextBox.Text.ToLower();
string destinationName = sourceName[0].ToUpper();

for (int i = 0; i < (sourceName.Length - 1); i++) {
  if (sourceName[i + 1] == "")  {
    destinationName += sourceName[i + 1];
  }
  else {
    destinationName += sourceName[i + 1];
  }
}
txtTextBox.Text = desinationName;
Válaszolt 07/12/2009 17:56
a forrás felhasználó

szavazat
-1

Itt van egy C ++ változatát. Van rajta egy sor nem uppercaseable szavak, mint prononuns és elöljárószókat. Azonban én nem ajánlom ezt a folyamatot automatizálja, ha foglalkozni fontos szövegeket.

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <set>

using namespace std;

typedef vector<pair<string, int> > subDivision;
set<string> nonUpperCaseAble;

subDivision split(string & cadena, string delim = " "){
    subDivision retorno;
    int pos, inic = 0;
    while((pos = cadena.find_first_of(delim, inic)) != cadena.npos){
        if(pos-inic > 0){
            retorno.push_back(make_pair(cadena.substr(inic, pos-inic), inic));
        }
        inic = pos+1;
    }
    if(inic != cadena.length()){
        retorno.push_back(make_pair(cadena.substr(inic, cadena.length() - inic), inic));
    }
    return retorno;
}

string firstUpper (string & pal){
    pal[0] = toupper(pal[0]);
    return pal;
}

int main()
{
    nonUpperCaseAble.insert("the");
    nonUpperCaseAble.insert("of");
    nonUpperCaseAble.insert("in");
    // ...

    string linea, resultado;
    cout << "Type the line you want to convert: " << endl;
    getline(cin, linea);

    subDivision trozos = split(linea);
    for(int i = 0; i < trozos.size(); i++){
        if(trozos[i].second == 0)
        {
            resultado += firstUpper(trozos[i].first);
        }
        else if (linea[trozos[i].second-1] == ' ')
        {
            if(nonUpperCaseAble.find(trozos[i].first) == nonUpperCaseAble.end())
            {
                resultado += " " + firstUpper(trozos[i].first);
            }else{
                resultado += " " + trozos[i].first;
            }
        }
        else
        {
            resultado += trozos[i].first;
        }       
    }

    cout << resultado << endl;
    getchar();
    return 0;
}
Válaszolt 30/09/2008 00:27
a forrás felhasználó

szavazat
-1

Perl ezt megteheti:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Válaszolt 16/09/2008 12:11
a forrás felhasználó

szavazat
-1

Anélkül, hogy egy kész funkció, a szuper-egyszerű, alacsony szintű algoritmus kell átalakítani a karakterláncot címformátumra:


convert first character to uppercase.
for each character in string,
    if the previous character is whitespace,
        convert character to uppercase.

Ez asssumes a „convert karakter nagybetűs” meg fog tenni, hogy helyesen függetlenül attól, hogy a karakter kisbetű-nagybetű érzékeny (pl „+”).

Válaszolt 03/08/2008 17:25
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more