2012-01-12 154 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); 
    } 
相關問題