2012-01-12 220 views
-4

我的代码有问题。我不知道我做错了什么。我想让用户写一些句子,然后程序应该将书写的句子分成单个单词,在这里我使用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 2012-01-12 08:21:01

+0

你收到的错误是什么? – user978122 2012-01-12 08:21:53

+3

尝试在您的代码中使用英语。它会帮助人们更好地理解它。 – 2012-01-12 08:21:58

回答

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的答案就是一个很好的例子。另外 - 语义:字符串**已经**被传递“作为参考”;你的意思是通过引用*传递字符串引用*。 – 2012-01-12 08:23:15

+0

方法对我来说是新的,并且正在学习使用ref,out等的正确方法。 – 2012-01-12 08:45:55

+0

确实记 - 谢谢你谢尔盖 – 2012-01-12 08:51:03

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

是的,它现在的工作但是我在词语之间仍有空白。句子应该有空格。 – 2012-01-12 08:26:21

+0

@KristyMaitz所以....不要添加空格... – 2012-01-12 08:27:13

+0

我必须删除 - 返回字符串之间的空格。加入(“”,p); - 现在它完美的工作 - 谢谢你晒 – 2012-01-12 08:28:10

5

一个简单的方法你的字符串转换成驼峰转换,是创建自己以下的扩展方法:

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(" ", "")

+0

我从来没有使用ToCamel.Case - 从来没有提到它的一个方法教授。 – 2012-01-12 08:44:35

+0

@KristyMaitz'ToCamelCase'是我写我自己(如图答案),它并没有在C#语言中存在的方法......当然,你可以写'串stavek = CultureInfo.CurrentCulture.TextInfo.ToTitleCase (到Console.ReadLine()。ToLower将())'直接,但它更漂亮包装它的功能,更清晰地解释其意图。 – Nailuj 2012-01-12 08:49:16

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