Formatstrengen til tittel

stemmer
25

Hvordan kan jeg formatere en streng til vet tittelen saken ?

Publisert på 03/08/2008 klokken 16:03
kilden bruker
På andre språk...                            


18 svar

stemmer
16

Her er en enkel statisk metode for å gjøre dette i C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Svarte 03/08/2008 kl. 16:05
kilden bruker

stemmer
13

Jeg ville være skeptisk til automatisk upcasing alle blanke-innledes-ord i situasjoner der jeg ville kjøre risikoen for å tiltrekke raseriet til nitpickers.

Jeg ville i hvert fall vurdere å gjennomføre en ordbok for unntaks tilfeller som artikler og konjunksjoner. se:

"Skjønnheten og udyret"

Og når det kommer til egennavn, får ting mye styggere.

Svarte 03/08/2008 kl. 19:10
kilden bruker

stemmer
10

Her er en Perl løsning http://daringfireball.net/2008/05/title_case

Her er en Ruby løsning http://frankschmitt.org/projects/title-case

Her er en Ruby one-liner løsning: http://snippets.dzone.com/posts/show/4702

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

Hva hver plass gjør er å bruke en vanlig uttrykk substitusjon av det første tegn i hvert ord med store bokstaver versjon av den.

Svarte 03/08/2008 kl. 18:22
kilden bruker

stemmer
8

For å capatilise den på, si, C - bruk ASCII kodene ( http://www.asciitable.com/ ) for å finne den heltallige verdien av den forkullede massen og subtrahere 32 fra den.

Dette er en dårlig løsning hvis du noen gang tenkt å godta tegn utover az og AZ.

For eksempel: ASCII-134: a, ASCII 143: Å.
Ved hjelp av aritmetiske får du: ASCII 102: f

Bruk bibliotek samtaler, ikke anta at du kan bruke heltall aritmetikk på figurene dine for å få tilbake noe nyttig. Unicode er vanskelig .

Svarte 04/08/2008 kl. 21:16
kilden bruker

stemmer
6

I Silverlight er det ingen ToTitleCasei TextInfoklassen.

Her er en enkel regex basert måte.

Merk: Silverlight har ikke ferdigbygd regexes, men for meg er dette redusert ytelse er ikke et problem.

    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();
        });
    }
Svarte 09/06/2010 kl. 04:24
kilden bruker

stemmer
5

I Java, kan du bruke følgende kode.

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);
}
Svarte 02/03/2016 kl. 10:32
kilden bruker

stemmer
5

I Perl:

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

Det er enda i FAQ.

Svarte 29/09/2008 kl. 22:35
kilden bruker

stemmer
5

Hvis språket du bruker, har en metode som støttes / funksjon så bare bruke det (som i C # ToTitleCasemetode)

Hvis den ikke gjør det, vil du ønsker å gjøre noe som følgende:

  1. Les i strengen
  2. Ta det første ordet
  3. Forbokstav av ordet en
  4. Gå fremover og finne det neste ordet
  5. Gå til 3 om ikke på slutten av strengen, ellers exit

1. For å utnytte den i for eksempel C - bruk ASCII-koder for å finne den heltallige verdien av den forkullede massen og subtrahere 32 fra den.

Det må være mye mer feil sjekker inn koden (sikre gyldige bokstaver etc.), og funksjonen "kapitalisere" må innføre en slags "title-case-ordningen" på bokstavene for å se etter ord som ikke trenger skal capatilised ( 'og', 'men' etc. Her er en god ordning)

Svarte 03/08/2008 kl. 16:33
kilden bruker

stemmer
5

I hvilket språk?

I PHP er det:

ucwords ()

eksempel:

$HelloWorld = ucwords('hello world');
Svarte 03/08/2008 kl. 16:12
kilden bruker

stemmer
4

Excel-lignende RIKTIG:

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;
}
Svarte 02/03/2011 kl. 22:29
kilden bruker

stemmer
2

http://titlecase.com/har en API

Svarte 09/06/2010 kl. 04:09
kilden bruker

stemmer
1

Her er et enkelt eksempel på hvordan du gjør det:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Svarte 15/12/2017 kl. 11:54
kilden bruker

stemmer
1

Her er en implementering i Python: https://launchpad.net/titlecase.py

Og en port av denne implementeringen som jeg nettopp har gjort i C ++: http://codepad.org/RrfcsZzO

Svarte 19/11/2012 kl. 07:59
kilden bruker

stemmer
1

Det er et innebygd formel PROPER(n)i Excel.

Var ganske glad for å se at jeg ikke har til å skrive det selv!

Svarte 09/06/2010 kl. 04:07
kilden bruker

stemmer
1

Jeg tror bruk av Culture er ikke alltid pålitelige, dette den enkle og praktisk måte å manipulere streng manuelt:

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;
Svarte 07/12/2009 kl. 16:56
kilden bruker

stemmer
-1

Her har du en C ++ versjon. Det fikk et sett av ikke uppercaseable ord som prononuns og preposisjoner. Men jeg vil ikke anbefale å automatisere denne prosessen hvis du er til å håndtere viktige tekster.

#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;
}
Svarte 29/09/2008 kl. 23:27
kilden bruker

stemmer
-1

Med perl kan du gjøre dette:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Svarte 16/09/2008 kl. 11:11
kilden bruker

stemmer
-1

Uten å bruke en ferdig funksjon, til en super-enkel lavt nivå algoritme konvertere en streng til tittelen saken:


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

Dette asssumes på "konvertere tegn til store bokstaver" vil gjøre det riktig uavhengig av om karakteren er store og små bokstaver (f.eks '+').

Svarte 03/08/2008 kl. 16:25
kilden bruker

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