2012-01-12 33 views
-4

私のコードに問題があります。私は何が間違っているのか分かりません。私はユーザーが文章を書いて欲しいので、プログラムは書かれた文章を1つの単語に分割して、それぞれの単語の最初の文字でToUpperを使用し、スペースなしでもう一度一緒に参加する必要があります。C#で文字列をPascalCase文字列に変換するにはどうすればよいですか?

私のコードは次のとおりです。

static void Skrci(string stavek) 
    { 
     string[] p; 
     p = stavek.Split(' '); // polje separatov 

     for (int i = 0; i < p.Length; i++) 
     { 
      if (p[i].Length > 0) 
      { 
       char zacetnica = Char.ToUpper(p[i][0]); 
       p[i] = p[i].Remove(0, 1); 
       p[i] = p[i].Insert(0, zacetnica.ToString()); 
      } 
     } 
     stavek = string.Join(" ", p); 
    } 

    static void Main(string[] args) 
    { 
     string[] p = null; 
     Console.Write("Vpiši nek stavek: "); 
     string stavek = Console.ReadLine(); 
     Skrci(stavek); 
     Console.WriteLine(stavek); 
     Console.ReadKey(true); 
    } 

私は私が間違っているかを見ることができますが、私にはわからないかどうかを確認するためにステップを試してみました。

+4

したがって、プログラムがどのように間違っているかの例を挙げてください。私たちは本当にここであなたの宿題をしません。 – TomTom

+0

受け取ったエラーは何ですか? – user978122

+3

あなたのコードに英語を使ってみてください。それはここの人々がそれをより良く理解するのに役立ちます。 –

答えて

2

です値ではなく参照値。そのためにはrefキーワードを使用してください。

例:キャメルケースにあなたの文字列を変換する

static void Skrci(ref string stavek) 
    { 
     string[] p; 
     p = stavek.Split(' '); // polje separatov 

     for (int i = 0; i < p.Length; i++) 
     { 
      if (p[i].Length > 0) 
      { 
       char zacetnica = Char.ToUpper(p[i][0]); 
       p[i] = p[i].Remove(0, 1); 
       p[i] = p[i].Insert(0, zacetnica.ToString()); 
      } 
     } 
     stavek = string.Join(" ", p); 
    } 

    static void Main(string[] args) 
    { 
     string[] p = null; 
     Console.Write("Vpiši nek stavek: "); 
     string stavek = Console.ReadLine(); 
     Skrci(ref stavek); 
     Console.WriteLine(stavek); 
     Console.ReadKey(true); 
    } 
+1

'ref'に感謝します。 *この*シナリオでは、単に文字列を返すことははるかに好ましい方法です。よい例のためのShaiの答えを見てください。また、 - セマンティクス:文字列は**すでに**参照として渡されていました。あなたが意味することは、文字列参照を参照*で渡すことです。 –

+0

メソッドは私には新しく、refなどを使う適切な方法を学んでいます。 –

+0

はメモしておきました - あなたのセルゲイ –

8

あなたの問題はあなたの関数Skrciが値を返す(または、それが参照することにより、パラメータ()のアップデート)しないということである

は、ここでは、として機能するように、あなたの文字列を渡す必要がありますクイックフィックス

static string Skrci(string stavek) 
{ 
    string[] p; 
    p = stavek.Split(' '); // polje separatov 

    for (int i = 0; i < p.Length; i++) 
    { 
     if (p[i].Length > 0) 
     { 
      char zacetnica = Char.ToUpper(p[i][0]); 
      p[i] = p[i].Remove(0, 1); 
      p[i] = p[i].Insert(0, zacetnica.ToString()); 
     } 
    } 
    return string.Join(" ", p); 
} 

static void Main(string[] args) 
{ 
    string[] p = null; 
    Console.Write("Vpiši nek stavek: "); 
    string stavek = Console.ReadLine(); 
    stavek = Skrci(stavek); 
    Console.WriteLine(stavek); 
    Console.ReadKey(true); 
} 
+0

はいしかし、私は言葉の間にスティルスペースを持っています。文章は空白でなければなりません。 –

+0

@KristyMaitz so ....スペースを追加しないでください... –

+0

私はスペースを取り除かなければなりませんでした。結合( ""、p); - 今は完璧に動作しています。Shai –

5

一つの簡単な方法は、自分自身に次の拡張メソッドを作成することです:(https://stackoverflow.com/a/1168346/310001にクレジット)

public static String ToCamelCase(this String source) 
{ 
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(source.ToLower()); 
} 

ます単純に次のようにすることができます:

string stavek = Console.ReadLine().ToCamelCase(); 

編集:
そして、あなたは、単語間のスペースを削除したい場合は、もちろん、単に最後に.Replace(" ", "")を追加することができます。

+0

良く聞こえる - 決して言及しないその一つの方法教授。 –

+0

@KristyMaitz ToCamelCase'は(答えに示すように)私は自分自身を書いた方法であり、 '、それはあなたが、もちろん文字列stavek = CultureInfo.CurrentCulture.TextInfo.ToTitleCase'書くことができます... C#言語には存在しません。 (Console.ReadLine()。TOLOWER()) '直接、それがより明確にその意図を説明し、関数内でそれを包む非常に良くあります。 – Nailuj

0

私は右のあなたを理解していれば、これはあなたがやろうとしているものである。

static string Skrci(string stavek) 
    { 
     string[] p; 
     p = stavek.Split(' '); // polje separatov 

     for (int i = 0; i < p.Length; i++) 
     { 
      if (p[i].Length > 0) 
      { 
       char zacetnica = Char.ToUpper(p[i][0]); 
       p[i] = p[i].Remove(0, 1); 
       p[i] = p[i].Insert(0, zacetnica.ToString()); 
      } 
     } 
     stavek = string.Join(String.Empty, p); 

     return stavek; 
    } 

    static void Main(string[] args) 
    { 
     string[] p = null; 
     Console.Write("Vpiši nek stavek: "); 
     string stavek = Console.ReadLine(); 
     stavek = Skrci(stavek); 
     Console.WriteLine(stavek); 
     Console.ReadKey(true); 
    } 

あなたは空白なしで文字列を連結したい場合は、セパレータとして「」を使用してユーザーstring.Joinをしません。また、メソッドの結果を入力文字列だけで出力するわけでもありません。

0
static string Skrci(string stavek) 
    { 
     string[] p; 
     p = stavek.Split(' '); // polje separatov 

     for (int i = 0; i < p.Length; i++) 
     { 
      if (p[i].Length > 0) 
      { 
       char zacetnica = Char.ToUpper(p[i][0]); 
       p[i] = p[i].Remove(0, 1); 
       p[i] = p[i].Insert(0, zacetnica.ToString()); 
      } 
     } 
     stavek = string.Join("", p); 

     return stavek; 
    } 

    static void Main(string[] args) 
    { 
     string[] p = null; 
     Console.Write("Vpiši nek stavek: "); 
     string stavek = Console.ReadLine(); 
     stavek = Skrci(stavek); 
     Console.WriteLine(stavek); 
     Console.ReadKey(true); 
    } 
関連する問題