1111#include < cmath>
1212#include < cassert>
1313
14- namespace excelNumber
15- {
16- std::string convertFromNumberToExcelColumn (unsigned int n);
17- unsigned int excelColumnStingToNumber (std::string col);
18-
19- unsigned int alphabetToNumber (char alphabet);
20- }
14+ #include " excelColumnNumber.h"
2115
2216int main (int argc, char *argv[])
2317{
24- std::cout << excelNumber ::convertFromNumberToExcelColumn ( 0 ) << std::endl ;
25- std::cout << excelNumber ::convertFromNumberToExcelColumn ( 1 ) << std::endl ;
26- std::cout << excelNumber ::convertFromNumberToExcelColumn ( 100 ) << std::endl ;
27- std::cout << excelNumber ::convertFromNumberToExcelColumn ( UINT_MAX ) << std::endl ;
18+ std::cout << excelColumnNumber ::convertFromNumberToExcelColumn ( 0 ) << std::endl ;
19+ std::cout << excelColumnNumber ::convertFromNumberToExcelColumn ( 1 ) << std::endl ;
20+ std::cout << excelColumnNumber ::convertFromNumberToExcelColumn ( 100 ) << std::endl ;
21+ std::cout << excelColumnNumber ::convertFromNumberToExcelColumn ( UINT_MAX ) << std::endl ;
2822
2923 std::cout << " ------------ " << std::endl ;
3024
31- std::cout << excelNumber ::alphabetToNumber (' a' ) << std::endl ;
32- std::cout << excelNumber ::alphabetToNumber (' z' ) << std::endl ;
33- std::cout << excelNumber ::alphabetToNumber (' A' ) << std::endl ;
34- std::cout << excelNumber ::alphabetToNumber (' Z' ) << std::endl ;
35- std::cout << excelNumber ::alphabetToNumber (' 5' ) << std::endl ;
25+ std::cout << excelColumnNumber ::alphabetToNumber (' a' ) << std::endl ;
26+ std::cout << excelColumnNumber ::alphabetToNumber (' z' ) << std::endl ;
27+ std::cout << excelColumnNumber ::alphabetToNumber (' A' ) << std::endl ;
28+ std::cout << excelColumnNumber ::alphabetToNumber (' Z' ) << std::endl ;
29+ std::cout << excelColumnNumber ::alphabetToNumber (' 5' ) << std::endl ;
3630
3731 std::cout << " ------------ " << std::endl ;
3832
39- unsigned int debug1 = excelNumber ::excelColumnStingToNumber (" AB" );
40- std::string debug2 = excelNumber ::convertFromNumberToExcelColumn ( debug1 );
33+ unsigned int debug1 = excelColumnNumber ::excelColumnStingToNumber (" AB" );
34+ std::string debug2 = excelColumnNumber ::convertFromNumberToExcelColumn ( debug1 );
4135 std::cout << debug1 << " " << debug2 << std::endl;
4236 assert ( debug2 == " AB" );
4337
4438 return 0 ;
45- }
46-
47-
48- namespace excelNumber
49- {
50-
51- std::string convertFromNumberToExcelColumn (unsigned int n)
52- {
53- if (0 == n)
54- {
55- return std::string ();
56- }
57-
58- // main code from https://www.geeksforgeeks.org/find-excel-column-name-given-number/
59- // Function to print Excel column name for a given column number
60-
61- std::string stdString;
62-
63- char str[1000 ]; // To store result (Excel column name)
64- memset ( str, ' \0 ' , sizeof (str) );
65- unsigned int i = 0 ; // To store current index in str which is result
66-
67- while ( n > 0 )
68- {
69- // Find remainder
70- int rem = n % 26 ;
71-
72- // If remainder is 0, then a 'Z' must be there in output
73- if ( rem == 0 )
74- {
75- str[i++] = ' Z' ;
76- n = (n/26 ) - 1 ;
77- }
78- else // If remainder is non-zero
79- {
80- str[i++] = (rem-1 ) + ' A' ;
81- n = n / 26 ;
82- }
83- }
84- str[i] = ' \0 ' ;
85-
86- // Reverse the string and print result
87- std::reverse ( str, str + strlen (str) );
88-
89- stdString = str;
90- return stdString;
91- }
92-
93- unsigned int alphabetToNumber (char alphabet)
94- {
95- unsigned int ret = 0 ;
96-
97- // a .. z : 97 ... 122
98- // A .. Z : 65 ... 90
99-
100- unsigned int castAlphabet = (unsigned int ) alphabet;
101-
102- if ( castAlphabet >= 97 && castAlphabet <= 122 )
103- {
104- ret = castAlphabet - 97 + 1 ;
105- }
106-
107- if ( castAlphabet >= 65 && castAlphabet <= 90 )
108- {
109- ret = castAlphabet - 65 + 1 ;
110- }
111-
112- return ret;
113- }
114-
115- unsigned int excelColumnStingToNumber (std::string col)
116- {
117- unsigned int ret = 0 ;
118- unsigned int colSize = col.size ();
119-
120- for (int colIt = 0 ; colIt < colSize ; colIt++)
121- {
122- char chCol = col.at ( colSize - (colIt + 1 ) );
123- unsigned int numCol = alphabetToNumber ( chCol );
124-
125- unsigned int calc = pow ( 26 , colIt ) * numCol;
126- ret = ret + calc;
127- }
128-
129- return ret;
130- }
131-
132- } // end of namespace
39+ }
0 commit comments