C++: Middle Three Digits

Bjarne-stroustrup
 


The task is to:

Write a function/procedure/subroutine that is called with an integer value and returns the middle three digits of the integer if possible or a clear indication of an error if this is not possible.
Note: The order of the middle digits should be preserved.

Your function should be tested with the following values; the first line should return valid answers, those of the second line should return clear indications of an error:

123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345
1, 2, -1, -10, 2002, -2002, 0

#include <iostream>

std::string middleThreeDigits(int n)
{
	auto number = std::to_string(std::abs(n));
	auto length = number.size();

	if (length < 3) {
		return "less than three digits";
	} else if (length % 2 == 0) {
		return "even number of digits";
	} else {
		return number.substr(length / 2 - 1, 3);
	}
}

int main()
{
	auto values {123, 12345, 1234567, 987654321, 10001,
		-10001, -123, -100, 100, -12345,
		1, 2, -1, -10, 2002, -2002, 0};

	for (auto&& v : values) {
		std::cout << "middleThreeDigits(" << v << "): " <<
		middleThreeDigits(v) << "\n";
	}
}
Output:
middleThreeDigits(123): 123
middleThreeDigits(12345): 234
middleThreeDigits(1234567): 345
middleThreeDigits(987654321): 654
middleThreeDigits(10001): 000
middleThreeDigits(-10001): 000
middleThreeDigits(-123): 123
middleThreeDigits(-100): 100
middleThreeDigits(100): 100
middleThreeDigits(-12345): 234
middleThreeDigits(1): less than three digits
middleThreeDigits(2): less than three digits
middleThreeDigits(-1): less than three digits
middleThreeDigits(-10): less than three digits
middleThreeDigits(2002): even number of digits
middleThreeDigits(-2002): even number of digits
middleThreeDigits(0): less than three digits

SOURCE

Content is available under GNU Free Documentation License 1.2.