Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C++] Utilizzo del string.assign()

    Sto cercando di fare una funzione che da un array di char prenda determinate parti di testo, copiandole in una stringa. Purtroppo con la string.assign() riesco solo a prendere una parte, perchè ogni volta che viene utilizzata azzera la stringa. Come posso fare in modo che non cancelli la stringa?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Che codice usi?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Originariamente inviato da shodan
    Che codice usi?
    Come da titolo, il C++ .

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Codice non linguaggio
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da il_dordollano
    Come da titolo, il C++ .
    Scusa ma non capisco la domanda! Devo postare la parte di codice in questione? È una parte di un programma abbastanza esteso...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Mostra solo la parte coinvolta ... se te l'hanno chiesta vuol dire che senza non si può dare nessuna risposta concreta ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Scusate sono nuovo di forum sulla programmazione

    Questa funzione deve caricare sulla stringa dei valori presi dal un array char, solo che deve farlo senza prendere altri valori, in pratica deve prendere solo ciò che sta tra le virgolette. Devo usare una string perchè ho occupato tutta la memoria con gli array, per cui se ne faccio un altro mi da errore.

    codice:
    void riempimento_pixels(int x, int y, int n_char, int n_color, string pixels, char arraych[])
    {
      int inizio, saltare;
      string stringa;
      saltare = 2*(n_color+1)+1; 
      
      
      for(int i=0; i<y; i++)
      {
      	inizio = find_char('"', 0, saltare, arraych); //questa mia funzione richiede in input il carattere da trovare, da che punto dell'array partire, quante volte saltare il carattere determinato se lo incontra e l'array in questione
      	stringa.assign (arraych, inizio+1 ,x); //qua carica in stringa il mio pezzo di array, ma cancella durante ogni ciclo quello che c'è già dentro
      	saltare = saltare+2;
      }
    }
    Fa parte di un progetto abbastanza laborioso per quanto riguarda il mio livello di informatica (sono al liceo scientifico in quinta, questo programma sarebbe la mia tesina)
    Ogni consiglio è ben accetto

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E' append() il metodo che ti serve.
    http://www.cplusplus.com/reference/s...string/append/
    codice:
    stringa.append(arraych, inizio+1 ,x)
    Anche se molto probabilmente sarebbe più semplice ragionare direttamente in termini di std::string senza funzioni fatte in casa.
    Vedi i metodi find(), find_first_of() et similia.
    http://www.cplusplus.com/reference/string/string/

    Devo usare una string perchè ho occupato tutta la memoria con gli array, per cui se ne faccio un altro mi da errore.
    Questa non l'ho capita.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    E' append() il metodo che ti serve.
    Grazie mille, era proprio la funzione che non riuscivo a trovare!

    Anche se molto probabilmente sarebbe più semplice ragionare direttamente in termini di std::string senza funzioni fatte in casa.
    Può essere visto come processo errato? Perchè l'ho utilizzata diverse volte nel programma e ci ho messo davvero poco per costruirla; forse avrei impiegato di più per cercarla online. Tuttavia, dovendo portare questo programma alla maturità, è meglio che mi accorga subito se qualcosa è deprecabile.

    Questa non l'ho capita.
    Provo a chiarirmi.
    Sto scrivendo un programma che legge una foto .xpm (Pixmap, un Bitmap semplificato, in pratica) e salva un altro file.xpm nel quale vengono eseguite delle modifiche sui pixel (colori, dimensione...). Avrei potuto fare tutto con delle string, ma utilizzare continuamente il substr avrebbe rallentato l'esecuzione, quindi ho cominciato a scrivere tutto con array di char. Fino a quando ho dichiarato gli array con le variabili andava tutto bene (stavo provando file piccoli), poi mi è stato detto che non è errato definire gli array con variabili quindi ho dovuto usare dei define. A un certo punto mi serviva un array bidimensionale e, dopo aver utilizzato una cosa come "array1[100000] e array2[1000][1000]" ovviamente è arrivato il fatidico errore "Errore di segmentazione (core dump creato)", quindi ora devo aggiungere stringhe. Ho dovuto usare numeri così grandi perchè già un'immagine con 90*100 pixel utilizza più o meno 1200 caratteri...
    Ora mi trovo a riutilizzare le string.

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da il_dordollano
    Può essere visto come processo errato? Perchè l'ho utilizzata diverse volte nel programma e ci ho messo davvero poco per costruirla;
    Diciamo che anche reinventando la ruota si impara. Di solito le fasi di apprendimento implicano la necessaria dose di fai da te, ma una volta appresi bene i concetti è meglio usare qualcosa di standardizzato come la libreria standard, specie se fornisce le cose che ti servono. Tradotto in soldoni: finché si studia tutto (o quasi) è lecito, è dopo che iniziano le rogne.

    Ora mi trovo a riutilizzare le string.
    L'errore è dovuto al fatto che hai esaurito lo stack. Puoi variarne la capacità agendo sulle opzioni del compilatore/linker (VC++ utilizza 1MB per lo stack), ma è preferibile allocare nell'heap mole così grande di dati.

    Per quanto riguarda le string. Le string nascono per sostituire le stringhe ASCIIZ del C che sono array di char NULL terminated, ma un array di char non è una stringa. In altre parole, usa le string per manipolare testi, non dati binari (non che non si possa fare ma a volte è come piantare un chiodo con un sasso). Se vuoi manipolare array di char veri e propri la classe adatta è vector<char>.
    Ovviamente tutto questo prendilo come un suggerimento per il futuro.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.