For example, enter: abcd123.4567.890.123
Output: 123.4567.890
. "" As the connector can be connected to two digits, but requires. "" Must both sides number.
Problems encountered during the interview, because ignoring the process of '0', it is hung up.
#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"); }