2013-04-21 33 views
0
using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.Globalization; 

    namespace Project_Scorps_1 
    { 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Convert_Click(object sender, EventArgs e) 
     { 
      string s = textBox1.Text; 
      char [] c = new char [s.Length]; 
      for (int i = 0; i < s.Length; i++) 
      { 
       if (i % 2 == 0) 
       { 
        (s[i].ToString()).ToUpper(CultureInfo.InvariantCulture); 
       } 

       if (i % 2 != 0) 
       { 
        (s[i].ToString()).ToLower(); 
       } 
      } 

      textBox2.Text = s; 
     } 
    } 
} 

这是我迄今为止的代码。 textBox1是您输入传票的文本框,而textbox2是包含输出的框。C# - 将常规文本转换为TeXt的程序的程序

它给我输出的是我输入的同一个句子!

回答

3

这是因为字符串是immutable该值被认为是不可变的,因为一旦通过附加,删除,替换或插入字符创建该值,就可以*不*修改该值。。然而,什么可以做,就是利用现有的字符串(或字符字符串中),以建立一个新的字符串:

string result = string.Empty; 
string s = textBox1.Text; 
char[] c = new char[s.Length]; 
for (int i = 0; i < s.Length; i++) 
{ 
    if (i % 2 == 0) 
    { 
     result += (s[i].ToString()).ToUpper(CultureInfo.InvariantCulture); 
    } 

    if (i % 2 != 0) 
    { 
     result += (s[i].ToString()).ToLower(); 
    } 
} 

textBox2.Text = result; 

创建每次追加一个字符可以是一个相当昂贵的操作时间一个新的字符串。如果你的输入相当长,你应该考虑使用StringBuilder。您可以阅读有关StringBuilderhere的更多信息。

此外,您不需要计算两次模数,您可以改为使用if..else

+0

你只会在每次迭代时为's'指定一个字符。 – Femaref 2013-04-21 16:19:48

0

这可能是使用LINQ

的帮助较短
string s = "This Kind Of Text"; 

var newstr = String.Join("", s.Select((c, i) => i % 2 == 0 
           ? char.ToLower(c, CultureInfo.InvariantCulture) 
           : char.ToUpper(c, CultureInfo.InvariantCulture))); 
1

字符串是不可变的 - 你不能改变它们。你需要有一个单独的变量来保存你的结果:

string result = ""; 
for (int i = 0; i < s.Length; i++) 
{ 
    if (i % 2 == 0) 
    { 
     result += (s[i].ToString()).ToUpper(CultureInfo.InvariantCulture); 
    } 

    if (i % 2 != 0) 
    { 
     result += (s[i].ToString()).ToLower(); 
    } 
} 

textBox2.Text = result; 
+0

非常好,ty :) – Scorps 2013-04-21 16:26:45