1

私はこれに数時間近く取り組んできました。私の解決策は論理的に正しいと思いますが、目的の出力が得られません。たとえば、文字 "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

4 に答える 4

7

あなたがしたい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が返されます。)

于 2013-08-31T09:30:55.337 に答える
3

'hlhh'は c++ 文字列ではなく、char ベクトルはpush_back単一の charのみを使用できます。

 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>オブジェクトを生成し、入力オブジェクトのすべての要素をコピーするため、パフォーマンスのオーバーヘッドが発生します。

于 2013-08-31T09:44:42.253 に答える
1

これを追加しています: 'hlhh' マルチバイト文字

myArr.push_back('hlhh');

それらは個別に追加する必要があります。

myArr.push_back('h');
myArr.push_back('l');
myArr.push_back('h');
myArr.push_back('h');
于 2013-08-31T09:34:54.673 に答える