Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] Stringhe

    Ciao a tutti, ho cominciato da poco a programmare in C++, trovando in rete una buona Guida amatoriale sul C++, ke pero non parla di Stringhe...

    Se qualcuno potrebbe un attimo introdurmele perchè di certo non posso basarmi su Python

    E poi un'altra cosa, in base al quella che so sulle stringhe invece, ho fatto una roba del genere:

    codice:
            char oper;
    	cin >> oper;
    	
    	if (oper=="+") {                        // Per tutti questi "if" mi da: Iso C++ forbids 
    		result = n1+n2;                 // comparison between pointer and integer.
    	}
    	if (oper=="-") {
    		result = n1+n2;
    	}
    	if (oper==("x"||"*")) {                //Questa me la da buona  :unz: 
    		result = n1+n2;
    	}
    	if (oper=="/") {
    		result = n1/n2;
    	}
    Come potete notare sarebbe l'operatore della calcolatrice

    Qualcuno mi spiega perchè non funge?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Ti invito a prendere visione del Regolamento interno.

    1) Il titolo deve essere più esplicito possibile
    2) Il codice va postato indentato e all'interno degli appositi tag CODE.
    3) Per ciascuna discussione uno ed un solo problema (nota che il forum non è una guida passo passo alla programmazione).
    4) Quando ci sono degli errori nel codice (in compilazione e/o esecuzione) essi vanno sempre evidenziati, riportando i messaggi di errore che il compilatore/esecutore dà.


    Correggo quanto possibile.

    Chiedi "perchè non funge"... integra la richiesta: cosa non funge? che comportamenti ha? dà errori in compilazione? quali?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Le stringhe in C++ non esistono come tipo nativo, ma sono implementate a livello di array di char. I literal di tipo stringa (come "+", "-", "ciao", eccetera) sono considerati dei puntatori a char costanti (const char *) che puntano ad un area di memoria dove è mappata la tabella delle stringhe dell'eseguibile.
    Proprio perché sono puntatori, non ha senso confrontare le stringhe con l'operatore ==, dato che questo farebbe un confronto di puntatori (restituendo true non se le due stringhe sono uguali come contenuto, ma se si trovano alla stessa locazione di memoria); inoltre, nel tuo caso stai facendo una cosa ancora diversa: stai cercando di confrontare un char con un puntatore a char, e per questo ti viene fuori quell'errore (il tipo char è un singolo carattere, e quindi un tipo di numero intero, mentre il literal stringa è un puntatore, da cui il criptico messaggio di errore).

    Quello che ti conviene fare, nel tuo caso, è usare, invece dei literal di tipo stringa, i literal di tipo char, che si specificano tra apici singoli ('+', '-', ...); a questo punto il confronto diventa tra due char (che sono tipi primitivi) e funziona come previsto. Nota tuttavia che la riga che "ti dà buona" non fa quello che credi, per ottenere il risultato che speri devi scrivere
    codice:
    if (oper=='x' || oper=='*') {
    Tornando invece alle stringhe, se fossimo in C, si userebbe la funzione strcmp, che confronta il contenuto dei due array di caratteri e restituisce 0 se sono uguali, un numero negativo se la prima precede la seconda, un numero positivo in caso contrario.
    Tuttavia, fortunatamente il C++ fornisce un metodo per evitare tutte le menate che vengono dagli array di char, ossia la classe std::string. Essa incapsula un array dinamico di char (sollevandoci anche dal peso della gestione della memoria), ed effettua l'overloading dei vari operatori ==, <, >, +, e altri, rendendo così l'uso delle stringhe analogo a quello dei linguaggi di alto livello.

    Tieni conto che il C++ è un linguaggio molto complesso, specie se si viene da linguaggi di alto livello si tendono a dare per scontate molte cose che nel C++ ti vengono fornite a livello di libreria standard e non incorporate direttamente nel linguaggio; per questo ti consiglio di lasciar stare i tutorial online e di recuperarti invece un buon libro.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4

    Re: Moderazione

    Originariamente inviato da LeleFT
    Ti invito a prendere visione del Regolamento interno.

    1) Il titolo deve essere più esplicito possibile
    2) Il codice va postato indentato e all'interno degli appositi tag CODE.
    3) Per ciascuna discussione uno ed un solo problema (nota che il forum non è una guida passo passo alla programmazione).
    4) Quando ci sono degli errori nel codice (in compilazione e/o esecuzione) essi vanno sempre evidenziati, riportando i messaggi di errore che il compilatore/esecutore dà.


    Correggo quanto possibile.

    Chiedi "perchè non funge"... integra la richiesta: cosa non funge? che comportamenti ha? dà errori in compilazione? quali?


    Ciao.
    Scusa, seguo molto le Guide di Html.it, ma del forum mi sono appena registrato, ah comunque potete mettere risolto o qualsiasi cosa

    Senti Mitaly, grazie della risposta tu che libro mi consiglieresti perchè di C++ non ne trovo molti... Anzi magari se me lo trovi in italiano visto ke essendo agli inizi con l'inglese potrei capire una cosa per un'altra xD

  5. #5

    Re: Re: Moderazione

    Originariamente inviato da Sonnhy
    Senti Mitaly, grazie della risposta tu che libro mi consiglieresti perchè di C++ non ne trovo molti... Anzi magari se me lo trovi in italiano visto ke essendo agli inizi con l'inglese potrei capire una cosa per un'altra xD
    Purtroppo i libri su cui ho studiato all'inizio non sono un granché (e l'ho scoperto retrospettivamente); magari dai un'occhiata a questa lista (ovviamente guardando nella sezione "beginner" ) e scegli quello che più ti ispira.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.