查找字符串中指定字母的索引位置

时间:2018-01-23 10:12:58

标签: c# .net arrays string

如果我第一次没有说清楚,我道歉。我在下面用粗体进一步编辑了我的解释。

在下面的程序中,用户输入一个单词,然后输入一个用户想用任何字符替换的字母。例如,用户输入单词“Hello”,替换字母为“l”,带“$”。所以“你好”将成为“他所以”。 首先,目标是找到“l”的位置(示例 - 2,3),然后替换该特定位置的元素。

我首先找到“l”的位置并将其存储在findIndex数组中。每次运行程序时,我都会将“22222”存储在findIndex []数组中。在这一点上,我甚至不确定我是否正在应用正确的逻辑。任何建议将被认真考虑!请不要使用LINQ。

public static void RemoveSpecifiedCharacters()
    {
        Console.WriteLine("\nWrite a word/sentence: ");
        string myString = Console.ReadLine();

        Console.Write("Type the character you would like to replace: ");
        string myCharacter = Console.ReadLine();
        int[] findIndex = new int[myString.Length];

        for (int i = 0; i < myString.Length; i++)
        {

            findIndex[i] = myString.IndexOf(myCharacter, 0);

        }

        for (int i = 0; i < findIndex.Length; i++)
        {
            Console.Write(findIndex[i]);
        }           
    }

4 个答案:

答案 0 :(得分:0)

以下应该达到目的:

var str = "Hello";
var replaced = str.Replace('l', '$');

答案 1 :(得分:0)

尽管使用String.Replace更容易,但我只是想解释为什么你会得到[2,2,2,2,2]数组。

首先,IndexOf方法返回字符首次出现的索引,从0开始。

其次,您正在使用方法重载IndexOf(myCharacter, 0),它“说”应始终从字符串的开头执行字符搜索。

为避免此问题,您应该使用IndexOf(myCharacter, i, 1)来将搜索设置为从第i个字符开始,而不是字符串的开头。

答案 2 :(得分:0)

我想一个简单的解决方案是将字符串拆分成字符数组,然后进行比较? 例如:

        Console.WriteLine("\nWrite a word/sentence: ");
        char[] myString = Console.ReadLine().ToCharArray();

        Console.Write("Type the character you would like to replace: ");
        char myCharacter = Console.ReadLine().ToCharArray()[0];
        int[] findIndex = new int[myString.Length];
        int indexCount = 0;
        for (int i = 0; i < myString.Length; i++)
        {
            if (myString[i] == myCharacter)
                findIndex[indexCount++] = i;

        }

        for (int i = 0; i < indexCount; i++)
        {
            Console.Write(findIndex[i]);
        }

答案 3 :(得分:0)

这可能是你想要的:

public static void RemoveSpecifiedCharacters()
{
    Console.WriteLine("\nWrite a word/sentence: ");
    string myString = Console.ReadLine();

    Console.Write("Type the character you would like to replace: ");
    string myCharacter = Console.ReadLine();
    List<int> findIndex = new List<int>();

    int offs = 0;
    while (offs < myString.Length)
    {
      offs = myString.IndexOf(myCharacter, offs);;
      if (offs == -1)
        break;
      findIndex.Add(offs);
      offs++;
    }

    for (int i = 0; i < findIndex.Count; i++)
    {
        Console.Write(findIndex[i]);
    }           
}

设置字符串开头的初始偏移量,如果未找到退出则尝试查找所需字符的索引,否则存储位置&amp;增加偏移量,以便在找到的位置后开始下一个循环。然后继续循环。

由于您不知道将找到多少个字符,因此列表优于存储结果的数组。它随后可以转换为带有.ToArray()的数组。