C ++:查找字符串中char的最后一次出现

时间:2013-08-31 09:26:54

标签: c++

我已经为此工作了将近几个小时。我相信我的解决方案在逻辑上是正确的,但是我没有得到所需的输出。例如,假设我想找到字符“h”最后一次出现在该字符串中:“hlhhhlh”(如果我们从0开始,则为6)。

我的程序编译,但它不起作用。此代码仅查找char元素第一次出现“h”时。

#include <iostream>
#include <vector>
#include <sstream>

using namespace std;
int getIndex(vector<char> arr, char t);

int main()
{
 vector<char> myArr(0);

 myArr.push_back('l');
 myArr.push_back('l');
 myArr.push_back('l');
 myArr.push_back('hlhh');
 int i = getIndex(myArr, 'h');
 cout << i << endl;
}

int getIndex(vector<char> myArr, char t)
{

int n=0, m=0, count=0;
string y,s;
vector<string> arr(0);

for(int i =0; i < myArr.size(); i++)
{
  stringstream st;
  st << myArr[i];
  st >> y;
  arr.push_back(y);
}

stringstream ss;
ss << t;
ss >> s;

for(int i=0; i < arr.size(); i++)
 {
    if(arr[i] == "h")
    {
        n++;
    }
    else if(arr[i] == "l")
    {
        m++;
    }
  }

  for(int i=0; i< arr.size(); i++)
  {
      if(arr[i]==s)
      {
          count++;
          if(count == n)
          {
              return i;
          }
          else if(count == m)
          {
              return i;
          }
      }
  }

}

4 个答案:

答案 0 :(得分:6)

您想要std::string::rfind

std::string s = "hlhhhlh";

std::cout << "The last 'h' in '" << s << "' is at position "
          << s.rfind('h') << std::endl; // output here is: The last 'h' in hlhhhlh is at position 6

(如果字符串中没有出现该字符,则返回s.npos。)

答案 1 :(得分:2)

'hlhh'不是c ++字符串,char矢量只能push_back单个字符:

 myArr.push_back('l');
 myArr.push_back('l');
 myArr.push_back('l');
 myArr.push_back('h');
 myArr.push_back('l');
 myArr.push_back('h');
 myArr.push_back('h');

作为一种更好的做法,getIndex函数应该是:

int getIndex(vector<char> &myArr, char t);

而不是

int getIndex(vector<char> myArr, char t);

因为passing by value将生成新的vector<char>对象并复制输入对象的所有元素,从而产生性能开销。

答案 2 :(得分:0)

你要添加这个:'hlhh'是一个多字节字符

myArr.push_back('hlhh');

需要单独添加,即

myArr.push_back('h');
myArr.push_back('l');
myArr.push_back('h');
myArr.push_back('h');

答案 3 :(得分:-1)

您可以使用带有rfind()的String来查找字符串中最后一次出现的字符,如“Kerrek SB”所示。 如果你想使用带有Vector的字符串,那么下面的示例代码可以帮助你,

  #include<iostream>
  #include<vector>
  #include<string>
  using namespace std;


  int main()
  {
     vector<string> arr(0);
     arr.push_back(string("h"));
     arr.push_back(string("l"));
     arr.push_back(string("h"));
     arr.push_back(string("l"));
     arr.push_back(string("h"));
     arr.push_back(string("h"));
     arr.push_back(string("l"));
     arr.push_back(string("h"));
     arr.push_back(string("l"));
     arr.push_back(string("h"));
     arr.push_back(string("l"));
     for (int i=arr.size()-1; i >=0; i--)
       if (arr[i] == string("h")) {
          cout<<"\n H is present at"<< i;
          break;
       }
    return 0;
   }