Skip to content

Commit f55bc4e

Browse files
committed
I have organized the contents. (namespace, code)
1 parent 1e0c830 commit f55bc4e

File tree

3 files changed

+122
-106
lines changed

3 files changed

+122
-106
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// excelColumnNumber.cpp
2+
3+
#include "excelColumnNumber.h"
4+
5+
namespace excelColumnNumber { // {{ begin of namespace
6+
7+
std::string convertFromNumberToExcelColumn(unsigned int n)
8+
{
9+
if (0 == n)
10+
{
11+
return std::string();
12+
}
13+
14+
// main code from https://www.geeksforgeeks.org/find-excel-column-name-given-number/
15+
// Function to print Excel column name for a given column number
16+
17+
std::string stdString;
18+
19+
char str[1000]; // To store result (Excel column name)
20+
memset( str, '\0', sizeof(str) );
21+
unsigned int i = 0; // To store current index in str which is result
22+
23+
while ( n > 0 )
24+
{
25+
// Find remainder
26+
int rem = n % 26;
27+
28+
// If remainder is 0, then a 'Z' must be there in output
29+
if ( rem == 0 )
30+
{
31+
str[i++] = 'Z';
32+
n = (n/26) - 1;
33+
}
34+
else // If remainder is non-zero
35+
{
36+
str[i++] = (rem-1) + 'A';
37+
n = n / 26;
38+
}
39+
}
40+
str[i] = '\0';
41+
42+
// Reverse the string and print result
43+
std::reverse( str, str + strlen(str) );
44+
45+
stdString = str;
46+
return stdString;
47+
}
48+
49+
unsigned int alphabetToNumber(char alphabet)
50+
{
51+
unsigned int ret = 0;
52+
53+
// a .. z : 97 ... 122
54+
// A .. Z : 65 ... 90
55+
56+
unsigned int castAlphabet = (unsigned int) alphabet;
57+
58+
if ( castAlphabet >= 97 && castAlphabet <= 122 )
59+
{
60+
ret = castAlphabet - 97 + 1;
61+
}
62+
63+
if ( castAlphabet >= 65 && castAlphabet <= 90 )
64+
{
65+
ret = castAlphabet - 65 + 1;
66+
}
67+
68+
return ret;
69+
}
70+
71+
unsigned int excelColumnStingToNumber(std::string col)
72+
{
73+
unsigned int ret = 0;
74+
unsigned int colSize = col.size();
75+
76+
for (int colIt = 0 ; colIt < colSize ; colIt++)
77+
{
78+
char chCol = col.at( colSize - (colIt + 1) );
79+
unsigned int numCol = alphabetToNumber( chCol );
80+
81+
unsigned int calc = pow( 26, colIt ) * numCol;
82+
ret = ret + calc;
83+
}
84+
85+
return ret;
86+
}
87+
88+
} // }} end of namespace
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// excelColumnNumber.h
2+
3+
#include <iostream>
4+
#include <string>
5+
#include <limits>
6+
#include <iterator>
7+
#include <algorithm>
8+
9+
#include <cstdio>
10+
#include <cstring>
11+
#include <cmath>
12+
#include <cassert>
13+
14+
namespace excelColumnNumber
15+
{
16+
std::string convertFromNumberToExcelColumn(unsigned int n);
17+
unsigned int excelColumnStingToNumber(std::string col);
18+
19+
unsigned int alphabetToNumber(char alphabet);
20+
}
21+

excelColumnNumber/main.cpp

Lines changed: 13 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -11,122 +11,29 @@
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

2216
int 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

Comments
 (0)