【问题标题】:C++ How to find char in a char array by using find function?C++ 如何使用 find 函数在 char 数组中查找 char?
【发布时间】:2011-05-02 21:24:39
【问题描述】:

如何使用 find 函数在 char 数组中查找 char?如果我只是循环元音,那么我本可以得到答案,但我被要求使用 std::find.. 谢谢。

bool IsVowel (char c) { 

    char vowel[] = {'a', 'e', 'i', 'o', 'u'};            
    bool rtn = std::find(vowel, vowel + 5, c);

    std::cout << " Trace : " << c  << " " << rtn << endl;

    return rtn; 
 }

【问题讨论】:

    标签: c++ arrays char


    【解决方案1】:
    bool IsVowel (char c) { 
    
        char vowel[] = {'a', 'e', 'i', 'o', 'u'};
        char* end = vowel + sizeof(vowel) / sizeof(vowel[0]);            
        char* position = std::find(vowel, end, c);
    
        return (position != end); 
     }
    

    【讨论】:

      【解决方案2】:

      简化和修正

      inline bool IsVowel(char c) {
          return std::string("aeiou").find(c) != std::string::npos;
      }
      

      查看演示 http://ideone.com/NnimDH

      【讨论】:

      • 这个很晚了,但是std::string在堆上分配数据,比在栈上分配要慢。
      【解决方案3】:

      std::find(first, last, value) 返回一个迭代器,指向在 [first, last) 范围内匹配 value 的第一个元素。如果没有匹配,则返回last

      特别是,std::find 不返回布尔值。要获得您正在寻找的布尔值,您需要将 std::find 的返回值(不先将其转换为布尔值!)与last 进行比较(即,如果它们相等,则未找到匹配项)。

      【讨论】:

      • 我必须使用 char::iterator 吗?我认为没有 char:iterator 这样的东西,对吧?我应该使用什么样的迭代器?以及如何检查它是否结束?通常,如果它是一个字符串,我们可以像 s.end() == 它那样做,但数组没有 .end()。
      • char*(指向 char 的指针)在此上下文中是一个迭代器。您的示例中的endvowel+5。当然,使用 std::vector 或 std::string 会更容易(或更简单)。
      【解决方案4】:

      用途:

      size_t find_first_of ( char c, size_t pos = 0 ) const;
      

      参考:http://www.cplusplus.com/reference/string/string/find_first_of/

      【讨论】:

      • 问题是关于字符数组而不是 std::string
      【解决方案5】:

      在数组中寻找一个字符的序列——为什么要把 bool 拖进去。如果可以,请给出一个简单直接的答案。

          #include <iostream>
          #include <stdio.h>
          using namespace std;
          //Position
          int posc(char suit[], char fc, int sz)
              {
                  int i = 0;
                  do
                  {
                      if (toupper(fc) == suit[i]) return i;
                      else
                      i = i + 1;
                  } 
                  while (i < sz);
                  cout << "\n Character " << fc << " not available in list";
                  return 99;
              }
          int main()
          {
              char suit[] = { 'S', 'D', 'C', 'H' };
              char fc;
              int res;
              int sz = size(suit);
              cout << "\n Enter a character: ";
              cin >> fc;
              res = posc(suit, fc, sz);
              cout << "\n Sequence no: " << res;
              return 0;
          }
      

      添加 main 和 cout 装饰只是为了显示有效的解决方案

      【讨论】:

      • 您能否提供有关您的解决方案的更多详细信息?
      • 见上文——它吐出的只是一个序列号。
      • 最初的问题询问如何使用std::find。我没有看到你使用这个功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2017-11-21
      相关资源
      最近更新 更多