<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[IndexRechnung]]></title><description><![CDATA[<p>Guten Morgen Community.</p>
<p>Ich habe ein Frage zu einer &quot;Rechnung&quot; mit chars.<br />
Als Index, habe ich wie bei Excel, z.B. &quot;A1&quot;, &quot;C8&quot;, &quot;D2&quot; usw.<br />
In einer meiner Methoden gebe ich Positionen aber als Koordinaten an, sprich per xy-Werte. A1 würde bei mir 0,0 entsprechen, B2 wäre 1,1.<br />
Wenn ich jetzt bei &quot;Z1&quot; angelange, wäre das bei mir die Position 0,25. Danach käme wieder AA1, AB1, wie bei Excel. AB1 wäre dann wiederrum 0,27.<br />
Ich habe zuerst über den %-Operator nachgedacht, aber mit meiner Rechung hätte das in einer Endlosschleife geendet. Dabei dachte bei dem Beispiel mit AB1 an</p>
<pre><code class="language-cpp">string index;
int x = 27;
if(x &gt; 25) //das alphabet hat 26 buchstaben, ich fang aber bei 0 an
    index = &quot;A&quot; + ('A' + (27 % 26)); //ergibt 1, 'A' + 1 = 'B'
else
    index = 'A' + x;
</code></pre>
<p>Das sollte auch funktionieren, wenn man einen Index von nur 2 Buchstaben haben wird, was wohl bei mir der Fall ist, aber ich hätte gerne eine universelle Lösung, wenn es doch mal weitergehen sollte, sodass ich das Programm nicht erweitern muss, sondern es gleich mit drin ist.<br />
Ich werde wohl eine Schleife brauchen, das weiß ich, aber wie ich schon sagte, wird es für mich da in einer Endlosschleife bleiben, bzw. ich weiß nicht die richtige Abbruchbedingung.<br />
Sagen wir ich hätte die Zahl 52, welche, wenn ich richtig liege, AAA darstellen soll. Wenn ich jetzt den Modulo 26 darauf setze, kommt direkt 0 raus und damit könnte ich dann höchstens das 2. A hinzufügen.<br />
Ich denke man müsste vorher noch die Zahl normal durch 26 teilen, damit man weiß, wieviele Buchstaben in der Zahl stecken und dann mit einer for-Schleife so oft den Modulo darauf verwenden, aber ich glaube ich habe irgendwo einen Denkfehler mit den Zahlen.<br />
Über Hilfe wäre ich erfreut.</p>
<p>Mit freundlichen Grüßen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304965/indexrechnung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 26 Jun 2026 20:53:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304965.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Jun 2012 09:29:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to IndexRechnung on Mon, 18 Jun 2012 09:29:05 GMT]]></title><description><![CDATA[<p>Guten Morgen Community.</p>
<p>Ich habe ein Frage zu einer &quot;Rechnung&quot; mit chars.<br />
Als Index, habe ich wie bei Excel, z.B. &quot;A1&quot;, &quot;C8&quot;, &quot;D2&quot; usw.<br />
In einer meiner Methoden gebe ich Positionen aber als Koordinaten an, sprich per xy-Werte. A1 würde bei mir 0,0 entsprechen, B2 wäre 1,1.<br />
Wenn ich jetzt bei &quot;Z1&quot; angelange, wäre das bei mir die Position 0,25. Danach käme wieder AA1, AB1, wie bei Excel. AB1 wäre dann wiederrum 0,27.<br />
Ich habe zuerst über den %-Operator nachgedacht, aber mit meiner Rechung hätte das in einer Endlosschleife geendet. Dabei dachte bei dem Beispiel mit AB1 an</p>
<pre><code class="language-cpp">string index;
int x = 27;
if(x &gt; 25) //das alphabet hat 26 buchstaben, ich fang aber bei 0 an
    index = &quot;A&quot; + ('A' + (27 % 26)); //ergibt 1, 'A' + 1 = 'B'
else
    index = 'A' + x;
</code></pre>
<p>Das sollte auch funktionieren, wenn man einen Index von nur 2 Buchstaben haben wird, was wohl bei mir der Fall ist, aber ich hätte gerne eine universelle Lösung, wenn es doch mal weitergehen sollte, sodass ich das Programm nicht erweitern muss, sondern es gleich mit drin ist.<br />
Ich werde wohl eine Schleife brauchen, das weiß ich, aber wie ich schon sagte, wird es für mich da in einer Endlosschleife bleiben, bzw. ich weiß nicht die richtige Abbruchbedingung.<br />
Sagen wir ich hätte die Zahl 52, welche, wenn ich richtig liege, AAA darstellen soll. Wenn ich jetzt den Modulo 26 darauf setze, kommt direkt 0 raus und damit könnte ich dann höchstens das 2. A hinzufügen.<br />
Ich denke man müsste vorher noch die Zahl normal durch 26 teilen, damit man weiß, wieviele Buchstaben in der Zahl stecken und dann mit einer for-Schleife so oft den Modulo darauf verwenden, aber ich glaube ich habe irgendwo einen Denkfehler mit den Zahlen.<br />
Über Hilfe wäre ich erfreut.</p>
<p>Mit freundlichen Grüßen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224457</guid><dc:creator><![CDATA[IndexRechnung]]></dc:creator><pubDate>Mon, 18 Jun 2012 09:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to IndexRechnung on Mon, 18 Jun 2012 10:00:26 GMT]]></title><description><![CDATA[<p>Mir ist außerdem noch eingefallen, dass wenn ich bei AZ1 angelange, das nächste BA1 sein wird und meine Lösung somit auch wieder nicht geht, da ich konstant A am Anfang einfüge.</p>
<p>Wie ich schon sagte, über Hilfe wäre ich erfreut.</p>
<p>Mit freundlichen Grüßen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224463</guid><dc:creator><![CDATA[IndexRechnung]]></dc:creator><pubDate>Mon, 18 Jun 2012 10:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to IndexRechnung on Mon, 18 Jun 2012 10:19:12 GMT]]></title><description><![CDATA[<p>Tip:</p>
<p>0 - 25 = A - Z<br />
26 - 701(=26<em>26+25) = AA - ZZ<br />
702 - 18277(=26*26*26+26</em>26+25) = AAA - ZZZ<br />
...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224466</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 18 Jun 2012 10:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to IndexRechnung on Mon, 18 Jun 2012 10:29:11 GMT]]></title><description><![CDATA[<p>Das Problem ist gar nicht so trivial, wie es am Anfang scheint, da der Wert jedes Buchstabens davon abhängt, ob er an der letzten oder einer anderen Stelle steht.<br />
wenn A=0<br />
dann ist Z=25<br />
soweit, so gut, aber<br />
AA = 1<em>26 + 0 = 26<br />
d.h. das erste A steht hier für 1 und das der letzten Stelle für 0<br />
demnach ist<br />
BA = 2</em>26 + 0 = 52 // hier ist B=2, da nicht an der letzten Stelle<br />
ZA = 26<em>26 + 0 = 676<br />
ZZ = 26</em>26 + 25 = 701<br />
AAA = 1*26^2 + 1*26 + 0 = 702</p>
<p>Vorschlag:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cassert&gt;
#include &lt;iterator&gt; // back_inserter
#include &lt;string&gt;

template&lt; typename Out &gt;
Out toLetterAZ( int idx, Out out )
{
    const int Base = 'Z'-'A'+1;
    assert( idx &gt;= 0 );
    const char c = 'A' + idx % Base;
    if( idx &gt;= Base )
        out = toLetterAZ( idx/Base - 1, out ); // Bem.: -1 wegen 'letzter Stelle Problem'
    *out++ = c;
    return out;
}

int main()
{
    using namespace std;
    for( int x; cin &gt;&gt; x; )
    {
        string excelLine;
        toLetterAZ( x, back_inserter( excelLine ) );
        cout &lt;&lt; &quot;  -&gt; &quot; &lt;&lt; excelLine &lt;&lt; endl;
    }
    return 0;
}
</code></pre>
<p>ergibt z.B. folgenden Output</p>
<pre><code>0
  -&gt; A
25
  -&gt; Z
26
  -&gt; AA
27
  -&gt; AB
676
  -&gt; ZA
701
  -&gt; ZZ
702
  -&gt; AAA
703
  -&gt; AAB
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224471</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 18 Jun 2012 10:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to IndexRechnung on Mon, 18 Jun 2012 10:33:18 GMT]]></title><description><![CDATA[<p>Vielen Dank an euch beide, jetzt leuchtet es mir ein.</p>
<p>Mit freundlichen Grüßen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224473</guid><dc:creator><![CDATA[IndexRechnung]]></dc:creator><pubDate>Mon, 18 Jun 2012 10:33:18 GMT</pubDate></item></channel></rss>