1

「12,30,57」などの C++ で LPSTR を取得して分割し、分割操作から返されたすべての数値 (すべて非 10 進数) を合計して、結果の長い値にしようとしています。

これは私が保証できる宿題ではありません。これは、メインの開発環境が関数をサポートしていないため、C++ で手続き型のものをコーディングする必要がある、私が書いている拡張機能用です。私は Java/C# 開発者なので、これはすべて謎です。注: これは純粋な C++ であり、C++.NET ではありません。最終的には、Objective-C でもバージョンを作成する必要があります (嬉しいことです)。可能な限り ANSI-C++ に準拠すればするほど、うまくいきます。

答え:

皆さんの助けに感謝し、見事に機能する私のコードを共有したかっただけです。私は実際には C++ の専門家ではないので、これは私にとってかなり難しいことです。でもみんなありがとう。

// Get
long theparam = GetSomeLPSTR(); // e.g. pointer to "1,2,3,4,5,6"

// Set
char *temp = (LPSTR)theparam;
char *temp2 = (LPSTR)malloc(strlen(temp)+1);
strcpy(temp2,temp);

long result = 0;
char * pch;

// Split
pch = strtok(temp2,",");

// Iterate
while (pch != NULL)
{
    // Add to result
    result += atoi(pch);

    // Do it again
    pch = strtok (NULL,",");
}

// Return
return result;
4

4 に答える 4

1

1つの簡単な方法(多くの、多かれ少なかれ効率的な方法があります):

LPSTR urcstring = "12,30,57";
std::stringstream ss(urcstring);
long n,m,p; 
char comma;

ss >> n;
ss >> comma;
ss >> m;
ss >> comma;
ss >> p;

std::cout << "sum: " << ( n + m +p ) << std::endl;
于 2011-11-02T08:54:49.630 に答える
1

とにかく部分文字列を変換する必要があることを考えるとlong、最も簡単な解決策はおそらく次のようなものです。

std::vector<long> results;
std::istringstream source(originalString);
long value;
while ( source >> value ) {
    results.push_back( value );
    char sep;
    source >> sep;
    if ( sep != ',' ) {
        source.setstate( std::ios_base::failbit );
    }
}
if ( ! source.eof() ) {
    //  Format error in input...
}
于 2011-11-02T10:03:55.140 に答える
1

ブーストが利用できる理想的な世界では、これを行うことができます:

#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>
typedef char* LPSTR;

int total(LPSTR input)
{
    std::vector<std::string> parts;
    std::string inputString(input);
    boost::split(parts, inputString, boost::algorithm::is_any_of(","));
    int total = 0;
    for(size_t i = 0 ; i < parts.size() ; ++i)
        total += boost::lexical_cast<int>(parts[i]);

    return total;
}

同じコードが Objective-C++ でも機能します。

于 2011-11-02T09:34:27.817 に答える
0
// Get
long theparam = GetSomeLPSTR(); // e.g. pointer to "1,2,3,4,5,6"

// Set
char *temp = (LPSTR)theparam;
char *temp2 = (LPSTR)malloc(strlen(temp)+1);
strcpy(temp2,temp);

long result = 0;
char * pch;

// Split
pch = strtok(temp2,",");

// Iterate
while (pch != NULL)
{
    // Add to result
    result += atoi(pch);

    // Do it again
    pch = strtok (NULL,",");
}

// Return
return result;
于 2011-11-02T10:16:15.153 に答える