Как мне преобразовать строку в строку PascalCase с помощью C #? - PullRequest
0 голосов
/ 12 января 2012

У меня проблема с моим кодом.Я не знаю, что я делаю не так.Я хочу, чтобы пользователь написал какое-то предложение, а затем программа должна разбить написанное предложение на отдельные слова, где я использую 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);
    }

Я попытался войти, чтобы увидеть, могу ли я видеть, что не так, но я не знаю.

Ответы [ 5 ]

8 голосов
/ 12 января 2012

Ваша проблема в том, что ваша функция 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);
}
5 голосов
/ 12 января 2012

Один простой способ преобразовать вашу строку в Camel Case - это создать себе следующий метод расширения:

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

Edit:
И если вы хотите удалить пробелы между словами, вы, конечно, можете просто добавить .Replace(" ", "") в конце.

2 голосов
/ 12 января 2012

Вы должны передать вашу строку в качестве ссылки, а не в качестве значения. Для этого используйте ключевое слово 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);
    }
0 голосов
/ 12 января 2012
 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);
    }
0 голосов
/ 12 января 2012

Если я вас правильно понимаю, это то, что вы пытаетесь сделать:

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

Если вы хотите объединить строки без пробелов, не используйте строку. Присоединяйтесь к "" в качестве разделителя. Кроме того, вы печатаете не результат метода, а только введенную вами строку.

...