【问题标题】:See if a string contains a char and write it out查看字符串是否包含字符并将其写出
【发布时间】:2014-06-25 14:13:31
【问题描述】:

我是这方面的初学者,希望有人能帮助我。

我正在尝试做的是检查char b 中的字符是否存在于string s 中。如果存在,它应该在正确的索引号处将字母写到 char 数组中。如果不是,那么它应该写一个-。但这会不断为我重置char b 的每个新实例。有什么想法吗?

public static void test(char[] h, char b, string s)
{
    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == b)
        {
            h[i] = b;
            Console.Write(h[i]);
        }
        if (s[i] != b)
        {
            h[i] = '-';
            Console.Write(h[i]);
        }
    }
}

【问题讨论】:

  • h 的长度是多少?你初始化了吗?
  • 可能有助于查看您用于调用此函数的代码。此外,预期输入和输出的示例将有助于了解您的要求是什么
  • 在调试器中逐行运行并观察变量。

标签: c# arrays char


【解决方案1】:

.Contains()方法

试试对你有用的 string.Contains 方法。

someString.Contains('c'); // where c can be any character. returns a bool value

http://msdn.microsoft.com/en-us/library/dy85x1sa(v=vs.110).aspx

.IndexOf()方法

您也可以尝试在字符串的 indexNumber 处获取字符。

int index = IndexOf("String here"); // zero based index number... returns int

上面提到的代码是查找字符的单行代码。

http://msdn.microsoft.com/en-us/library/k8b1470s(v=vs.110).aspx

只是为了帮助

我认为您想在可用的String 中搜索每个字符。几天前,Jon Skeet 告诉我这个

char characterToFind = 'r';
string s = "Hello world!";
int index = 0; // because foreach won't use any int i = 0 method
foreach (char c in s) { // foreach character in the string
  // read the character and post the output
  if(c == characterToFind) {
    Console.Write("Character found at: " + index.ToString());
  }
  index++; // increment
}

【讨论】:

  • 我认为您关注的是这个问题的错误方面。 OP 已经有用于检查字符串是否包含字符的工作代码......问题出在不同的东西上(从提供的信息中不清楚)
  • @musefan,是的,我只是添加了一个 :) 我正在寻找这种方法的 MSDN 文档。
  • 问题是每次运行都要保存字母。例如“monkey”,我尝试 char 'm',我将得到“m-----”,但如果我尝试 'o',下一次运行将是“-o-----”。我不知道它是否将每次运行的字符替换为“-”,或者它是否在每次运行后消失。
【解决方案2】:

您可以简单地执行以下操作:

string str = "hello world";
str.Contains('h');

【讨论】:

  • OP 不是在寻找如何检查字符是否在字符串中。
【解决方案3】:

你也可以使用:

string.IndexOfAny(b) >= 0;

它将为您提供可以存储在数组中的字符的索引。

【讨论】:

    【解决方案4】:

    您可以使用str.IndexOf(String char) 方法。

    【讨论】:

      【解决方案5】:

      您可以将代码简化为:

      for (int i = 0; i < s.Length; i++)
      {
          if(s[i] == b)
          {
              h[i] = b;
          }
          else
          {
              h[i] = '-';
          }
      
          Console.Write(h[i]);
      }
      

      (..实际上使用三元运算符?: 进一步简化它,但让我们保持简单)。以此作为输入运行它:

      var h = new char[16];
      test(h, 'p', "purple people");
      

      产生这个输入:

      p--p---p--p--
      

      ..我认为这就是你所追求的。

      【讨论】:

      • 谢谢。这几乎就是我所追求的。对于您的示例,我希望它在下一次运行时也产生相同的输入,并且文本中仍然有 p。每次我尝试一个新的字符来匹配它时都会忘记最后一个字符,或者我认为用'-'替换它。
      • 我现在已经解决了所有问题,我要做的就是创建另一个数组,然后将值更改为那个:)
      猜你喜欢
      • 2018-08-27
      • 2013-12-04
      • 2012-01-22
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2013-05-18
      相关资源
      最近更新 更多