1

着信文字列が null ではなく、空でもないかどうかを確認する必要があります

method(const char* utf8char){

....

string trim(char const *str){
    while(!isalnum(*str)) str++;
    end = str + strlen(str) - 1;
    while(end > str && !isalnum(*end)) end--;
    return string(str, end+1);
}

警告: ポインタと整数の比較

愚かな質問で申し訳ありませんが、私は C++ の初心者です。

4

2 に答える 2

1

'end'がconstchar*として宣言されている場合、コードは機能します。

#include <string>
using std::string;

string trim(char const *str){
  while(!isalnum(*str)) str++;
  char const *end = str + strlen(str) - 1;
  while(end > str && !isalnum(*end)) end--;
  return string(str, end+1);
}

int _tmain(int argc, _TCHAR* argv[])
{
  char buf[] = "  abc ";
  printf("%s", trim(buf).c_str()); // got "abc"
  return 0;
}

ps。vc10。

于 2012-06-21T08:51:01.650 に答える
1

私が使用している便利な関数のトリオは次のとおりです。

sch-parameter は、切り捨てられる文字のセットです。

void LTRIM(std::string& s, const char *sch)
{
    std::string ss=sch;
    int i=0, n=s.length();
    while ((i<n) && (ss.find(s.at(i),0)!=std::string::npos)) i++;
    s = (i>0)?s.substr(i,n-i):s;
}

void RTRIM(std::string& s, const char *sch)
{
    std::string ss=sch;
    int n = s.length()-1;
    int i=n;
    while ((i>0) && (ss.find( s.at(i),0)!=std::string::npos)) i--;
    s = (i<n)?s.substr(0,i+1):s;
}

void TRIM(std::string& s, const char *sch) { LTRIM(s, sch); RTRIM(s, sch); }
于 2012-06-21T08:51:40.827 に答える