0

在我的代码中,我试图找到“数字”、“标识符”和“单词”。数字定义为由字母、非字母或非数字字符(例如空格或 /n)分隔的数字序列。

如: 898A111(这个有两个号码) 898 111(这个也有两个号码)

单词被定义为一个字母引导一系列数字、字母或两者。

如: AJKALJ8923 或 ALSJOIA 或 B93082092(这些都算字)

标识符是用于引导单词或分隔两个数字的字母

如:

898A111(标识符为 A)
AJLKAKA(标识符为 A)

我一直在尝试写出可能的解决方案,就检查单词而言,我相信我有一个解决方案,但就计算和识别“数字”和“标识符”(在字符串中)而言,我处于完全丧失。有人有想法么?任何帮助将不胜感激。我想说我的 C++ 知识处于初学者的水平。

主要功能:http://pastebin.com/MrXKLXYv
头文件:http
://pastebin.com/Xn23zn7X 如果我不清楚分配供参考:http: //pastebin.com/2bgEPqbG

4

2 回答 2

0

也许你可以用它std::bitset来处理这种情况。

#include <bitset>

std::string strInput = "898A111";
std::string strDigit = "0123456789";
std::bitset<255> bsDigit;
std::vector<std::string> vctDigit;
for (int i = 0; i < strDigit.length(); i++)
{
    bsDigit[strDigit.at(i)] = true;
}

int nTemp = 0;
int nLength = strInput.length();
for (int i = 0; i < nLength; i++)
{
    if (!bsDigit[strInput.at(i)])
    {
        vctDigit.push_back(strInput.substr(nTemp, i - nTemp));
        nTemp = i + 1;
    }
    else if (i == nLength - 1)
    {
        vctDigit.push_back(strInput.substr(nTemp, (i + 1) - nTemp));
    }
}

std::vector<std::string>::iterator it = vctDigit.begin();
for (; it != vctDigit.end(); it++)
{
    std::cout << (*it).c_str() << std::endl;
}
于 2013-07-18T02:56:07.550 回答
0

您可以使用正则表达式来匹配您想要的格式。但是当你使用 C++ 时,你必须先下载 Boost,并包含头文件“boost/regex.hpp”

于 2013-07-18T02:31:09.947 回答