Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I really hope that i understood what you meant. I tried to make a program as you showed here and i came up with this:</p> <p>Macros.h:</p> <pre><code>#ifndef MY_MACROS_H #define MY_MACROS_H #define VALUES(base) \ ADD_VALUE(0,base) \ ADD_VALUE(1,base) \ ADD_VALUE(2,base) \ ADD_VALUE(3,base) \ ADD_VALUE(4,base) \ ADD_VALUE(5,base) \ ADD_VALUE(6,base) \ ADD_VALUE(7,base) \ ADD_VALUE(8,base) \ VALUE(9,base) #define VALUE(val,base) +1 #define ADD_VALUE(val,base) VALUE(val, base) #define DIGIT_COUNT (0 VALUES(1)) #define BASE_COUNT (DIGIT_COUNT + 1) #define ALL_VALUES ADD_ARRAY_VALUES(1) \ ADD_ARRAY_VALUES(BASE_COUNT) \ ADD_ARRAY_VALUES(BASE_COUNT * BASE_COUNT) \ ARRAY_VALUES(BASE_COUNT * BASE_COUNT * BASE_COUNT) #define ARRAY_VALUES(rank) +1 #define ADD_ARRAY_VALUES(rank) ARRAY_VALUES(rank) #define UNKNOWN_LETTER_PATTERN "" #define ARRAYS_COUNT (0 ALL_VALUES) #endif </code></pre> <p>Header.h:</p> <pre><code> #ifndef _MY_HEADER_H #define _MY_HEADER_H /***** * Includes ******/ #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include "Macros.h" using namespace std; /***** * Definitions ******/ #define FIRST_LETTER 'a' #define LAST_LETTER 'z' typedef unsigned char byte; typedef int NumberValueType; #define BASE_CHAR_VALUE '0' // character #define CHAR_TO_CHAR_INDEX(character) (character - FIRST_LETTER) #define CHAR_TO_NUM_INDEX(character) (character - BASE_CHAR_VALUE) #define IS_CHAR_VALID(character) ((character &gt;= FIRST_LETTER) &amp;&amp; (character &lt;= LAST_LETTER)) int ParseInput(); string texttopattern(char c); #endif </code></pre> <p>And the implementation file: (of course that i also printed and haven't done anything important with the output).</p> <p>Main.cpp:</p> <pre><code> #include "Header.h" int s_arValues[ARRAYS_COUNT][DIGIT_COUNT] = { #undef VALUE #define VALUE(val,base) (base * val) #undef ADD_VALUE #define ADD_VALUE(val,base) VALUE(val, base), #undef ARRAY_VALUES #define ARRAY_VALUES(rank) { VALUES(rank) } #undef ADD_ARRAY_VALUES #define ADD_ARRAY_VALUES(rank) ARRAY_VALUES(rank), ALL_VALUES }; string texttopattern(char c) { string code[] = {"1","12","14","145", "15", "124", "1245", "125", "24", "245", "13", "123", "134", "1345", "135", "1234", "12345", "1235", "234", "2345", "136", "1236", "1346", "13456", "1356", "12346"}; if (IS_CHAR_VALID(c)) return code[CHAR_TO_CHAR_INDEX(c)]; else return UNKNOWN_LETTER_PATTERN ; } int ParseInput() { string ord; getline(cin, ord); vector&lt;string&gt; code; for(int i=0; i&lt;ord.length(); i++) { code.push_back(texttopattern(tolower(ord[i]))); } // Loop inputs for (vector&lt;string&gt;::iterator itInputs = code.begin(); itInputs != code.end(); itInputs++) { if (*itInputs == UNKNOWN_LETTER_PATTERN) { // Don't know what to do with unknown chars like spaces - your problem cout &lt;&lt; "unknown letter" &lt;&lt; endl; continue; } int number = 0; int nInputSize = itInputs-&gt;size(); // Loop every digit in the current pattern for (int nDigitIndex = 0; nDigitIndex &lt; nInputSize; nDigitIndex++) { if(nDigitIndex &gt;= sizeof(NumberValueType)) { cout &lt;&lt; number; number = 0; continue; } char cChar = itInputs-&gt;at(nDigitIndex); number += s_arValues[nInputSize - nDigitIndex - 1][CHAR_TO_NUM_INDEX(cChar)]; } // At this point you can use number cout &lt;&lt; number; cout &lt;&lt; endl; cout &lt;&lt; "End of letter" &lt;&lt; endl; } cin.get(); return 0; } void main() { ParseInput(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload