嗨,我是 c# 的新手,我正在尝试自己编写 trimleft 函数

Hi i'm a newbie in c# and i'm trying to write trimleft function by myself

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 函数 我不太明白我是如何做正常的 trim 版本的,但是我如何做 trimleft 版本的它不使用任何内置字符串。子字符串等函数

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

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;
}

找到输入字符串中第一个非 space 字符的索引,然后将其余字符复制到结果字符串并 return 它。

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

另一种方法是:

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

参见:Fiddle