-4

コードに問題があります。何が間違っているのかわかりません。ユーザーに文章を書いてもらいたいのですが、プログラムは書いた文章を1つの単語に分割し、配列内の各単語の最初の文字にToUpperを使用してから、スペースなしで再び結合します。

私のコードは:

    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);
    }

Step intoを試して、何が悪いのかがわかるかどうかを確認しましたが、わかりません。

4

5 に答える 5

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);
}
于 2012-01-12T08:20:42.003 に答える
5

文字列をキャメル ケースに変換する簡単な方法の 1 つは、次の拡張メソッドを自分で作成することです。

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

( https://stackoverflow.com/a/1168346/310001へのクレジット)

次に、次のように簡単に実行できます。

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

編集:
単語間のスペースを削除したい場合は、もちろん.Replace(" ", "")末尾に追加するだけです。

于 2012-01-12T08:23:23.023 に答える
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);
    }
于 2012-01-12T08:21:10.980 に答える
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);
    }

空白なしで文字列を連結したい場合は、文字列を使用しないでください。区切り文字として " " を使用して結合します。また、メソッドの結果を出力するのではなく、入力文字列だけを出力します。

于 2012-01-12T08:28:52.733 に答える
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);
    }
于 2012-01-12T08:29:06.960 に答える