例如输入:abcd123.4567.890.123
输出:123.4567.890
“.”可以作为连接符连接两个数字,但是要求"."两边必须都是数字。
面试时遇到的题,因为忽略了对‘0’的处理,所以挂了。
#include<iostream>
#include<stdio.h>
#define MAX_SIZE 0x500
bool IsDotCorrect(char*szInput, int i, int nLastCmpPos, int nLen)//Check if it's a correct dot.
{
if (nLastCmpPos < 0)
{
return false;
}
if ((i - 1 >= 0 && i + 1 <= nLen - 1 && (szInput[i - 1] >= '0' && szInput[i - 1] <= '9') && (szInput[i + 1] >= '0' && szInput[i + 1] <= '9')) && ((szInput[i + 1] - szInput[nLastCmpPos]) == 1 && szInput[nLastCmpPos] != '0'))
{
return true;
}
return false;
}
int main()
{
char szInput[MAX_SIZE] = { 0 };
gets_s(szInput, MAX_SIZE);
int nLen = strlen(szInput);
int nCount = 0;
int nCountPos = 0;
bool bIsCount = false;
int nLastCmpPos = -1;
int nCountBak = 0;
int nCountPosBak = 0;
for (int i = 0; i < nLen; i++)
{
if (!bIsCount)//Is Count Start
{
nCountPos = i;
}
if ((szInput[i] >= '0' && szInput[i] <= '9') || (szInput[i] == '.' && IsDotCorrect(szInput, i, nLastCmpPos, nLen)))//correct char
{
bIsCount = true;
if (szInput[i] == '.')//correct dot ++
{
nCount++;
}
else
{
if (i - 1 >= 0)//if it's first correct char, no need to compare
{
if (nCount == 0) //first num in this loop ,no need to compare
{
nCount++;
}
else
{
if (((szInput[i] - szInput[nLastCmpPos]) == 1) && szInput[nLastCmpPos] != '0')
{
nCount++;
}
else if (szInput[i] == '0' && szInput[nLastCmpPos] == '9')
{
nCount++;
}
else
{
bIsCount = false;
}
/*if (szInput[i] == '0' && szInput[nLastCmpPos] == '9')
{
nCount++;
}*/
}
}
else//first num ++
{
nCount++;
}
nLastCmpPos = i;
}
if (!bIsCount)//Count start
{
bIsCount = false;//Count again
if (nCountBak <= nCount)
{
nCountBak = nCount;
nCountPosBak = nCountPos;
}
nCountPos = 0;
nCount = 0;
nLastCmpPos = 0;
}
}
else//incorrect char
{
bIsCount = false;//Count again
if (nCountBak <= nCount)
{
nCountBak = nCount;
nCountPosBak = nCountPos;
}
nCountPos = 0;
nCount = 0;
nLastCmpPos = 0;
}
}
if (nCountBak <= nCount)
{
nCountBak = nCount;
nCountPosBak = nCountPos;
}
//abcd123.4567.890.123
//b12.34.12
for (int i = 0; i < nCountBak; i++)
{
printf("%c", *(szInput + nCountPosBak + i));
}
printf("\n");
system("pause");
}