如何使用结构将每个字符串中的字母移动到新字符串?

Posted

技术标签:

【中文标题】如何使用结构将每个字符串中的字母移动到新字符串?【英文标题】:How to move letter from each string to a new string using struct? 【发布时间】:2019-07-01 13:43:20 【问题描述】:

我需要创建一个结构,将后者从两个字符串中移出并将其带到一个新字符串中。示例字符串“世界” 字符串“书” 输出“wboorolkd” 我构建了结构,但我无法在这里得到我所做的输出

我是 C# 新手

using System.Text;
using System.Threading.Tasks;

namespace myprogram_Struct

    class Program
     
        static void Main(string[] args)
    
        Person person1 = new Person();
        Console.WriteLine(person1.name);
        person1.SetName("david");
        Console.WriteLine(person1.name);
        Person person2 = new Person("sarah");
        Console.WriteLine(person2.name);
        Console.ReadKey();

    
    

public struct Person


    public string name;
    public Person(string nm)
    
        name = nm;
    

    public void SetName(string newName)
    
        name = newName;
    

【问题讨论】:

您的代码没有任何逻辑来实现您上面提到的功能。您需要先尝试编写该逻辑,如果遇到任何问题,请返回此处。逻辑是将两个字符串逐个字符压缩并从中创建一个新字符串。提示:字符串是字符的集合.. 如果一个字符串比另一个长,应该怎么做? 到目前为止给出的解决方案仅限于两个字符串,这是您想要的 - 还是您想要组合 x 个字符串的解决方案? 【参考方案1】:

比@Rango 的答案更冗长、更幼稚的解决方案,但对于初学者来说可能更清楚。

string a = "abc";
string b = "defxyz";
StringBuilder sb = new StringBuilder();
int max = Math.Max(a.Length, b.Length);
for (int i = 0; i < max; i++)

    if (i < a.Length)
    
        sb.Append(a[i]);
    
    if (i < b.Length)
    
        sb.Append(b[i]);
    

Console.WriteLine(sb.ToString());

【讨论】:

我认为您的 Math.Max 解决方案比我的解决方案更好。没想到。但是为什么要使用 StringBuilder,StringBuilder.Append() 和 String += Char 之间是否存在性能差异? @Ahrtaler 是的,它更高效,但是对于这么短的字符串来说可以忽略不计。 我比我更喜欢这个解决方案。如果您对 LINQ 不太熟悉,您会更容易理解这一点,并且即使使用大字符串也很有效。 @Rango 最有效的方法是将循环与您的 remainder 位相结合。 Rotem,非常感谢您提供的代码,它可以按我的意愿工作,但是教授想被用作结构,这让我很生气,因为我知道该怎么做,它只是我可以'我脑子里没有结构,我希望你能帮我解决这个问题【参考方案2】:

我不确定这是否是你想要的,但如果我理解你的话,你可以这样做:

public struct Person

    public string name1;
    public string name2;

    public string merge()
    
        string retval = "";

        int length = name1.Length;

        if (length < name2.Length)
            length = name2.Length;

        for(int i = 0; i < length; i++)
        
            if (name1.Length > i)
                retval += name1[i];

            if (name2.Length > i)
                retval += name2[i];
        

        return retval;
    

【讨论】:

我试过了,但没有用,但你的程序接近 .answer 我的 rotem 是正确的,但他没有像作业要求的那样使用 struct 。谢谢 我复制了它,它运行良好。错误是什么?我会说Rotem,我的答案几乎是一样的。当然,您也可以将 Rotems 答案放入结构中。

以上是关于如何使用结构将每个字符串中的字母移动到新字符串?的主要内容,如果未能解决你的问题,请参考以下文章

凯撒加密算法(最简单的对称加密)

如何将不同字母表中的字符串保存到 SQL?

如何使用正则表达式,将字符串中的每个单词首字母大写

C语言编程: 文件移位加密与解密。

如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?

C ++中的凯撒密码