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 是包含输出的框。

它给我的输出与我输入的句子相同!

4

3 回答 3

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. StringBuilder 您可以在此处阅读更多信息。

此外,您不需要计算模数两次,只需使用 an 即可if..else

于 2013-04-21T16:19:13.770 回答
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;
于 2013-04-21T16:20:59.513 回答
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)));
于 2013-04-21T16:20:25.573 回答