başlık durumda Biçim dizesi

oy
24

Nasıl bir dize biçimlendiririm başlık durumda ?

Oluştur 03/08/2008 saat 17:03
kaynak kullanıcı
Diğer dillerde...                            


18 cevaplar

oy
16

İşte C # bunu yapmanın basit bir statik yöntemdir:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Cevap 03/08/2008 saat 17:05
kaynak kullanıcı

oy
13

Ben otomatik ben nitpickers öfkesini çeken riskini aday olacağını senaryolarda tümüyle beyaz-öncesinde-kelimeleri upcasing dikkatli olacaktır.

En azından makale ve bağlaçlar gibi istisna durumlar için bir sözlük uygulanması ele alacak. Bakın:

"Güzel ve Çirkin"

o özel adların gelince, şey daha çirkin olur.

Cevap 03/08/2008 saat 20:10
kaynak kullanıcı

oy
10

İşte Perl çözüm http://daringfireball.net/2008/05/title_case

İşte Yakut çözüm http://frankschmitt.org/projects/title-case

İşte Ruby tek satırlık çözüm: http://snippets.dzone.com/posts/show/4702

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

Ne tek satırlık yapıyor bunun büyük bir sürümü ile her kelimenin ilk karakterinin düzenli ifade değişimini kullanıyor.

Cevap 03/08/2008 saat 19:22
kaynak kullanıcı

oy
8

ASCII kodları (kullanımı - içinde capatilise için, C, ki http://www.asciitable.com/ komur tamsayı değerini bulmak ve ondan 32 çıkarmak için).

Hiç az ve AZ ötesinde karakterleri kabul planlıyorsanız bu fakir çözümdür.

Örneğin: ASCII 134: å, ASCII 143: Å.
Aritmetik kullanmak size alır: ASCII 102: f

Kütüphane çağrıları kullanın, geri kullanışlı bir şey almak için Karakterlerinize tamsayı aritmetik kullanabilirsiniz düşünmeyin. Unicode zor .

Cevap 04/08/2008 saat 22:16
kaynak kullanıcı

oy
6

Java, aşağıdaki kodu kullanabilirsiniz.

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);
}
Cevap 02/03/2016 saat 10:32
kaynak kullanıcı

oy
6

Silverlight hiçbir yoktur ToTitleCaseyılında TextInfosınıfında.

İşte size basit bir regex dayalı bir yoldur.

Silverlight önderlenmiş Regexes yok, ama benim için bu performans kaybı söz konusu değildir: Not.

    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();
        });
    }
Cevap 09/06/2010 saat 05:24
kaynak kullanıcı

oy
5

Perl:

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

Yani hatta SSS var.

Cevap 29/09/2008 saat 23:35
kaynak kullanıcı

oy
5

Kullandığınız dil desteklenen yöntemi / işlevi vardır o zaman sadece (C # gibi kullanan ToTitleCaseyöntemin)

Böyle olmazsa, o zaman aşağıdaki gibi bir şey yapmak istersiniz:

  1. dizesinde Oku
  2. İlk söz almak
  3. O kelimenin ilk harfini büyük 1
  4. İleri git ve sonraki kelimeyi bulmak
  5. değilse aksi exit dizenin sonunda 3'e git

1 , diyelim ki, C o bölgesindeki büyük harf için - kullanım ASCII kod komur tamsayı değerini bulmak ve ondan 32 çıkarmak için.

Orada kod (geçerli harfler vb sağlanması) kontrol çok daha fazla hata olması gerekir, ve "büyük harf" fonksiyonu gerekmez kelimeleri kontrol etmek harflerin üzerine "title durum şeması" bir çeşit empoze gerekecektir capatilised edilecek (vb 've' 'ama' İşte iyi bir düzendir)

Cevap 03/08/2008 saat 17:33
kaynak kullanıcı

oy
5

Hangi dilde?

PHP öyle:

ucwords ()

örnek:

$HelloWorld = ucwords('hello world');
Cevap 03/08/2008 saat 17:12
kaynak kullanıcı

oy
4

UYGUN Excel benzeri:

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;
}
Cevap 02/03/2011 saat 23:29
kaynak kullanıcı

oy
2

http://titlecase.com/Bir sahiptir API

Cevap 09/06/2010 saat 05:09
kaynak kullanıcı

oy
1

İşte bunu nasıl basit bir örneğidir:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Cevap 15/12/2017 saat 11:54
kaynak kullanıcı

oy
1

İşte Python bir uygulama var: https://launchpad.net/titlecase.py

Ve sadece C ++ yaptık bu uygulamanın bir bağlantı noktası: http://codepad.org/RrfcsZzO

Cevap 19/11/2012 saat 08:59
kaynak kullanıcı

oy
1

Yerleşik bir formül yoktur PROPER(n)Excel'de.

Kendim yazmak zorunda değil görmek oldukça memnun oldu!

Cevap 09/06/2010 saat 05:07
kaynak kullanıcı

oy
1

Ben CultureInfo kullanarak her zaman güvenilir olmadığını düşünüyorum, elle dize işlemek için bu basit ve kullanışlı bir yol:

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;
Cevap 07/12/2009 saat 17:56
kaynak kullanıcı

oy
-1

Burada bir C ++ sürümü var. Bu prononuns ve edat gibi olmayan uppercaseable kelime kümesi var. Ancak, söylemesi çok önemli metinler başa eğer bu işlemi otomatik tavsiye etmem.

#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;
}
Cevap 30/09/2008 saat 00:27
kaynak kullanıcı

oy
-1

Perlde ile yapabilirsiniz:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Cevap 16/09/2008 saat 12:11
kaynak kullanıcı

oy
-1

hazır bir fonksiyonu kullanılarak olmadan, son derece basit bir alt düzey algoritması başlık talebine bir dize dönüştürmek için:


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

Bu asssumes "büyük harfe karakterini dönüştürmek" doğru olursa olsun karakter harf duyarlı olup olmadığını o yapacak (örneğin '+').

Cevap 03/08/2008 saat 17:25
kaynak kullanıcı

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