4

助けてください!有効な文字が出現する前に、文字を見てアンダースコアの数を数えることを繰り返して、先頭のアンダースコアを見つけて削除するにはどうすればよいですか。文字列の末尾から後方に反復して、末尾のアンダースコアを見つけます。

次の方法を使用してアンダースコアを消去できますが、アンダースコアを見つけるためにどのように反復しますか。

resultF.erase(resultF.length()- trailingCount);
resultF.erase(0,leadingCount);

ユーザーが___twenty_three__の文字列を入力すると、最終結果は Twenty_three になります。したがって、先頭と末尾のアンダースコアのみが削除されます。

4

3 に答える 3

2

このようなものは、文字列ライブラリのfind_first_not_offind_last_not_ofを使用する必要があります。これらのページには優れたコード例があります。

// From the links above: 
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("erase trailing white-spaces   \n");
  string whitespaces (" \t\f\v\n\r");
  size_t found;

  found=str.find_last_not_of(whitespaces);
  if (found!=string::npos)
    str.erase(found+1);
  else
    str.clear();            // str is all whitespace

  cout << '"' << str << '"' << endl;

  return 0;
}
于 2012-04-19T01:05:06.493 に答える
1

これらの行に何か

string remove_(const string& str) {
  int i,j;
  int n = str.length();
  for(i=0;i < n && (str[i] != '_');i++);
  for(j=n;j > 0 && (str[j-1] != '_');j--);
   if(j <= i)
      return string(); //all underscores
  return ((str).substr(i,j-i));
}
于 2012-04-19T01:11:07.350 に答える
0

先頭文字の擬似コード:

std::string *str;
int ct = 0;

while(*str != '_'){
str++;
ct++;
}

For trailing characters:

while (* (str+length) != '_') {
str--;
ct++;
}
于 2012-04-19T01:05:13.957 に答える