int main() { std::string strInput = "1 8 2 2"; vecArray vecInputArray; ParseStringToVector(strInput, vecInputArray); CFence Fence; Fence.calculateAreaByDivision(vecInputArray); printf("%d\n", Fence.getMaximunArea()); return 0; }
// ID = 1 tchar * Extension::RangeToString(tchar * StringP, tchar * SingleItemDelimiterP, tchar * MultipleItemDelimiterP, tchar * OutputDelimiterP) { tstring String = StringP; // Join the two delimiters for ParseStringToVector() tstring SingleItemDelimiter = SingleItemDelimiterP; tstring MultipleItemDelimiter = MultipleItemDelimiterP; tstring OutputDelimiter = OutputDelimiterP; tstring Return = _T(""); vector<tstring> Ranges = ParseStringToVector(String, SingleItemDelimiter+MultipleItemDelimiter); //Return.resize(MAXSIZE_T); if (Ranges.size() == 1) Return = Ranges[0]; else if (Ranges.size() > 1) { unsigned long alreadyscanned = 0; // Run ranges scan for (unsigned long i = 0; i < Ranges.size()-1; i++) { alreadyscanned += Ranges[i].length(); // Scan the first character after the value: // Is single-number character? //if (String.find_first_of(SingleItemDelimiter.c_str(), alreadyscanned) != string::npos) if (HasFound(String, SingleItemDelimiter)) { Return += Ranges[i]; Return += OutputDelimiter; // Append data alreadyscanned += SingleItemDelimiter.length(); } // Is multiple-number character? //else if (String.find_first_of(MultipleItemDelimiter.c_str(), alreadyscanned) != string::npos) else if (HasFound(String, MultipleItemDelimiter)) { unsigned long diff = _tstoi(Ranges[i+1].c_str())-_tstoi(Ranges[i].c_str())+1; // Iterate all values and add to list for (unsigned int k = 0; k < diff; k++) { tchar temp[10] = {0}; _stprintf_s(temp, 10, _T("%i"), _tstoi(Ranges[i].c_str())+k); Return += temp; Return += OutputDelimiter; } // Append data alreadyscanned += MultipleItemDelimiter.length(); alreadyscanned += Ranges[i+1].length(); alreadyscanned += SingleItemDelimiter.length(); // Append last value as well i++; } MsgBox(Return.c_str()); } // Last delimiter Return += Ranges[Ranges.size()-1]; MsgBox(Return.c_str()); } // Remove last delimiter: // Return.erase(Return.length()-OutputDelimiter.length()); if (ReturnBool) { ReturnBool = false; return (tchar *)Return.c_str(); } else { return Runtime.CopyString(Return.c_str()); } }
// ID = 0 tchar * Extension::StringToRange(tchar * StringP, tchar * InputDelimiterP, tchar * SingleItemDelimiterP, tchar * MultipleItemDelimiterP) { tstring String = StringP; tstring InputDelimiter = InputDelimiterP; tstring SingleItemDelimiter = SingleItemDelimiterP; tstring MultipleItemDelimiter = MultipleItemDelimiterP; tstring Return = _T(""); vector<tstring> Ranges = ParseStringToVector(String, InputDelimiter); if (Ranges.size() == 1) Return = Ranges[0]; else if (Ranges.size() > 1) { // Sort ascendingly for (unsigned long i = 0; i < Ranges.size()-1; i++) { // If next in list is less in value than if (_tstoi(Ranges[i].c_str()) > _tstoi(Ranges[i+1].c_str())) { tstring temp = Ranges[i+1]; Ranges.insert(Ranges.begin()+i, temp); Ranges.erase(Ranges.begin()+i+2); i -= 2; } // If duplicate values if (_tstoi(Ranges[i].c_str()) == _tstoi(Ranges[i+1].c_str())) Ranges.erase(Ranges.begin()+i); } // Run ranges scan long startpos = -1; for (unsigned long i = 0; i < Ranges.size()-1; i++) { // Start position not defined if (startpos == -1) { // If this number is 1 less than next (part of range) if (_tstoi(Ranges[i+1].c_str()) - _tstoi(Ranges[i].c_str()) == 1) { startpos = i; } else if (_tstoi(Ranges[i+1].c_str()) - _tstoi(Ranges[i].c_str()) > 1) { Return += Ranges[i]; Return += SingleItemDelimiter; } } else { if (_tstoi(Ranges[i+1].c_str()) - _tstoi(Ranges[i].c_str()) > 1) { Return += Ranges[startpos]; Return += MultipleItemDelimiter; Return += Ranges[i]; Return += SingleItemDelimiter; startpos = -1; } } } // Handle last value if (startpos != -1) { Return += Ranges[startpos]; Return += MultipleItemDelimiter; Return += Ranges[Ranges.size()-1]; // No last element (see lines 74-5) startpos = -1; } else { Return += Ranges[Ranges.size()-1]; // No last element (see lines 74-5) } } // Remove last delimiter: // Return.erase(Return.length()-SingleItemDelimiter.length()); return Runtime.CopyString(Return.c_str()); }