【问题标题】:Hi i'm a newbie in c# and i'm trying to write trimleft function by myself [closed]嗨,我是 C# 的新手,我正在尝试自己编写 trimleft 函数 [关闭]
【发布时间】:2022-01-25 03:52:47
【问题描述】:
public static string TrimLeft(string word)
    {
        int numberOfLetters = 0;
        foreach (var c in word)
        {
            numberOfLetters++;
        }

        int start = 0, end = numberOfLetters - 1;
        string b = "";
        for (int i = 0; i < numberOfLetters; i++)
        {
            if (!char.IsWhiteSpace(word[i]))
           {
                start = i;

                b += word[i];
            }
            
        }


        Console.WriteLine("Trimmed version: {0}", b);
        return word;
    }

我正在尝试自己编写 trimleft 函数,但我无法弄清楚我是如何完成正常修剪版本的,但我如何在不使用任何内置字符串的情况下完成它的 trimleft 版本。子字符串等函数。

【问题讨论】:

  • 具体是什么没有按预期工作?当您在调试器中单步执行此代码时,哪个操作会产生意外结果?使用了哪些值?结果如何?预期的结果是什么?为什么?
  • Console.WriteLine(b),和return word ????这需要更多解释!
  • 我正在尝试自己编写 trimleft 内置函数我进行了正常修剪并尝试对其进行修改,但我现在找不到使这项工作正常工作的方法,此代码 jsut 占用所有空格并删除它们甚至在我不想要的单词之间我只想修剪 ex 参数中给出的左侧:“abc defg”我希望这个字符串变成“abc defg”
  • 修剪时,您将删除所有空格。所以使用以下内容:if(!char.IsWhiteSpace(word[i]))。还要更改以下内容: b = word.Substring(i)
  • 为什么要获取计数,将其转换为字符,将其转换为字符串,然后将其解析为整数?为什么不直接使用整数计数而不转换 3 次呢?此外,变量 start 和 end 被初始化但从未使用过。

标签: c# function trim


【解决方案1】:

这是一个较短的版本,它已经过测试并且可以正常工作

public static string TrimLeft(string word)
{
    string result = "";
    bool trimDone = false;

    foreach (var chr in word)
    {
        if (chr == ' ' && !trimDone) continue;
            result = result + chr;
            trimDone = true;
    }
    Console.WriteLine("Trimmed version: {0}", result);
    return result;
}

测试

var word = "  abc def !";
word = TrimLeft(word);

结果

abc def !

有人可以建议一个字符串生成器,但据我了解,它超出了项目的范围

还有另一个版本,但我认为它也超出了范围

public static string TrimLeft(string word)
{
    var i = 0;
    foreach (var chr in word)
    {
      if (chr != ' ')
      {
         if ( i > 0)
            {
                Console.WriteLine($"Trimmed version:{word[i..]}");
                return word[i..];
            }
            else break;
        }
        i++;
    }
    Console.WriteLine($"Nothing To Trim : {word}");
    return word;
}

【讨论】:

  • 这将删除所有空格,而不仅仅是前导空格。
  • 你测试过这个吗?使用输入参数“abc def”我得到“a”作为结果......
  • 我刚刚用你的话再次测试了它,它可以正常工作。
  • 好的,我不能重复我遇到的问题,现在它确实有效......(对不起?)
  • 是的,它工作得很好,我从来没有想过用 bool 来做这个,非常感谢
【解决方案2】:

找到输入字符串中第一个非空格字符的索引,然后将其余字符复制到结果字符串并返回。

如果在解决这个问题时不允许IndexOfSubstring,则可以循环找到第一个非空格字符,也可以循环完成复制操作。字符串构建器可用于有效地构建结果字符串。

【讨论】:

    【解决方案3】:

    另一种方法是:

            public static string TrimLeft(string word)
            {
                int i = 1;
                foreach (var chr in word)
                {
                    if (chr != ' ') break;
                    i++;
                }
                i--;
                return word[i..];
            }
    

    见:Fiddle

    【讨论】:

    • 看起来不错,但如果不允许使用 Substring,你就是在作弊。 word[i..] 在内部使用 Substring...
    • 或者子字符串在内部使用word[i..]? (鸡/蛋)
    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多