Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

1

10.12.2009, 20:30

char in int?

hi,
wir machen in der Schule gerade schiffe versenken und dann hat sollte ich meinem Freund diesen code hier erklären:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
using namespace std;

const int X=9;
const int Y=7;

int main()
{
char Spielfeld[X][Y];
int x, y;
char cx, cy;


    for (x=0; x<X; x++)
    {
        for (y=0; y<Y; y++)
        {
            Spielfeld[x][y] = '.';
        }
    }
    // Anzeige und Eingabe

    bool SchleifenEnde=false;
    int xin, yin;
    do
    {
        cout << "      1  2  3  4  5  6  7  8  9" << endl;
        for (y=0; y<Y; y++)
        {
            cout << (char)('A'+y) << "   ";
            for (x=0; x<X; x++)
            {
                cout << "  " << Spielfeld[x][y];
            }
            cout << endl;
        }
        cin >> cx >> cy;
        xin = cx - '1';
        yin = cy - 'A';
        if (xin>=0 && xin<9 && yin>=0 && yin<7)
        {
            Spielfeld[xin][yin] = 'x';
        }
        else
        {
             SchleifenEnde = true;
        }
    }
    while (!SchleifenEnde);
}


so schön und gut, habs ihm auch erklärt, nur ich versteh zwei zeilen nicht
und zwar die hier:

C-/C++-Quelltext

1
2
        xin = cx - '1';
        yin = cy - 'A';


vom allgemeinen her versteh ich es was damit erreicht wird, aber inhaltlich versteh ich nich wie das funktionieren soll, weil ja dieser char in int gecastet wird und so weiter

2.Frage
kann man das auch mit strings machen, da ich sowas ähnliches auch in mein schiffe versenken reinmachen will und dass man nur z.B. "2f" eingibt und dann die Zahl in einen int gecastet werden soll und dieses f auch in int
oder geht dass nur mit stringstreams?
New Project: Operation CityRacer

idontknow

unregistriert

2

10.12.2009, 20:39

Würde wohl sagen, dass 'A' von x abgezogen wird gemäß der Ascii Tabelle!
Ich prüfs mal nach.. sec

edit: jop ist so, der Ascii Betrag wird abgezogen (65)!

edit2: Der Sinn dahinter is folgender: Eingelesen wird die Position per Zahl (Reihe) und Buchstabe (Zeile). Die Zahl '1' und der Buchstabe 'A' geben dabei in der Ascii Tabelle das erste "Offset" der "Zeichenfolge" an. Sprich subtrahierst du von der eingabe Zahl '1' landest du bei x = 2. Analog dazu das slebe mit den Buchstaben. Wenns verständisprobleme dazu gibt fragen UND Ascii Tabelle ankucken damit sollte es klarer werden!
Deine 2. Frage kuck ich gleich an :)

öhh 2. Frage: einfach den String aufteilen in beie Angaben Zahl Buchstabe und dann wie oben verfahren? :P

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

10.12.2009, 20:48

Ein char is ja auch nur ein integer, lediglich halt mit kleinerem Wertebereich ;)

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

4

10.12.2009, 21:29

ok thx thx thx und wie kann ich zahlen oder buchstaben aus einem string rausfiltern? Hab bis jetzt noch nichts gescheites gefunden außer vllt. at() un dann einfach dass 2 element anwählen was ja immer der buchstabe ist aber wenn man es so eingibt "f2" dann gehts wiederum nich...
New Project: Operation CityRacer

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

6

10.12.2009, 21:35

hmm joa aber wie kann ich da eingebn dass ich entweder a,b,c,d,e oder f suche


Edit: ich glaub ich hab es find_first_of oder?
New Project: Operation CityRacer

idontknow

unregistriert

7

10.12.2009, 21:54

http://www.cplusplus.com/reference/strin…operator%5B%5D/

lol. Deine Koordinatenangabe hat im unteren Beispiel immer nur 2 Zeichen, das sollte wohl kein Prolbem sein, koordinateneingabe[0] => x, koordinateneingabe[1] => y x)

edit:

C-/C++-Quelltext

1
2
3
4
5
6
//Free Hand code:

bool IsCharLetter(std::string s, int pos)
{
    return (int)s[pos] >= 'A';
}
// so in etwa, der ansatz....

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

8

10.12.2009, 22:00

naja so gehts auch hab halt daran noch gedacht dass es später größere werden aber egal thx :D
New Project: Operation CityRacer

Werbeanzeige