1

我正在尝试在 C++ 中获取一个 LPSTR,例如“12,30,57”并将其拆分,然后将从拆分操作返回的所有数字(它们都是非十进制)相加成一个结果 long 值。

我可以向你保证,这不是家庭作业。这是我正在编写的一个扩展,它需要我在 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

一种简单的方法(有很多,或多或少有效):

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

在一个有可用提升的理想世界中,您可以这样做:

#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 回答
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 回答
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 回答