找到'号码'

时间:2013-07-18 00:23:52

标签: c++ counter

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

如: 898A111 (这有两个数字) 898 111 (这也有两个数字)

单词被定义为一个字母,表示一系列数字,字母或两者。

如: AJKALJ8923或ALSJOIA或B93082092 (这些都被认为是单词)

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

如:

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

我一直在试图弄清楚可能的解决方案,至于检查单词,我相信我有一个解决方案,但就计算和识别“数字”和“标识符”(字符串),我'我完全失去了。有人有主意吗?任何帮助都将不胜感激。我说我对C ++的知识处于初学者的水平。

主要功能:http://pastebin.com/MrXKLXYv
标题文件:http://pastebin.com/Xn23zn7X
如果我不清楚,可以作为参考作业:http://pastebin.com/2bgEPqbG

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;
}