Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-03-2004, 16:43   #1
lucas72
Senior Member
 
L'Avatar di lucas72
 
Iscritto dal: Aug 2002
Messaggi: 3992
tipo string e char con i puntatori..aiuto!!!

Ciao a tutti
Vorrei modificare il codice sotto sostituenso il tipo string con il tipo char
(stringa di caratteri), in quanto vorrei sfruttare una funzione di un altro programma che con il tipo char funzione e con string no!
(forse è anche colpa mia, che non ho capito bene la differenza tra i due tipi e il modo di usarli)

#include <iostream>
#include <string>
using namespace std;


char responso[256];

/* Prototipi di funzione */

void legginomi(string *source,int numelementi);
void visualizzanomi(string *source,int numelementi);

int main()
{
int QUANTISONO = 0;
cout << "Quante persone ci sono nella tua famiglia? ";
cin.getline(responso,256);
QUANTISONO = atoi(responso);

string* pNomi = new string[QUANTISONO];
legginomi(pNomi,QUANTISONO);


cout << endl << "I " << QUANTISONO << " nomi che hai inserito sono " << endl << endl;

visualizzanomi(pNomi,QUANTISONO);

delete [] pNomi; //Cancella l'array dal free store
pNomi = 0; //Assegna un valore null al puntatore
system ("PAUSE");
return 0;
}

void legginomi(string *source,int numelementi)
{
for (int riga = 0; riga < numelementi; riga++)
{
cout << "Inserisci il nome #" << riga+1 << " ";
cin.getline(responso,256);
source[riga] = responso;
}
}

void visualizzanomi(string *source,int numelementi)
{
for (int riga = 0; riga < numelementi; riga++)
{
cout << source[riga] << endl;
}
}


ho provato e riprovato a sostituire nei fari punti del codice "string"
con "char" con altre modifiche, ma ricevo sempre messaggi di errori dal compilatore (relativo alla chiamata delle funzioni il più delle volte)

grazie
lucas72 è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2004, 18:50   #2
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
l' "equivalente" C delle string e' il puntatore a char (char*), non il char*, quindi invece che un string* dovrai usare un char**.
Detto questo, secondo me e' decisamente piu' comodo scriversi un wrapper alla funzione che opera sui char* .

ad esempio
Codice:
wrapper_fun( const string& s )
{
	fun( s.c_str() );
}
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2004, 18:47   #3
lucas72
Senior Member
 
L'Avatar di lucas72
 
Iscritto dal: Aug 2002
Messaggi: 3992
Scusami ma non ci ho capito molto (sono agli inizi!)
cosa è un wrapper e come inserirla nel codice sopra?
Ho provato a sostituire char* a string* nel codice
ma il compilatore mi segnala comunque un errore qui:
string* pNomi = new string[QUANTISONO];

o qui:
legginomi(pNomi,QUANTISONO);


del tipo:
"cannot convert `char*' to `char**' in initialization
Esecuzione terminata"
cosa faccio?
Mi interesserebbe comunque di più capire (ed inserire nel codice sopra)
questa wrapper
ciao e grazie.
lucas72 è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2004, 20:42   #4
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originariamente inviato da lucas72
Scusami ma non ci ho capito molto (sono agli inizi!)
cosa è un wrapper e come inserirla nel codice sopra?
Ho provato a sostituire char* a string* nel codice
ma il compilatore mi segnala comunque un errore qui:
string* pNomi = new string[QUANTISONO];
Puoi considerare una string alla stregua di un char*.
Di conseguenza la tua linea di codice dovrebbe diventare piuttosto cosi':
Codice:
string** pNomi = new string* [QUANTISONO]
etc.

Ma piuttosto ti consiglio di cambiare tutti i char* (o i char[])
in stringhe,
ad esempio
Codice:
...
string responso;
 
 /* Prototipi di funzione */ 
 
 void legginomi(string *source,int numelementi); 
 void visualizzanomi(string *source,int numelementi); 
 
 int main() 
 { 
  int QUANTISONO;
  cin >> QUANTISONO;
 
 string* pNomi = new string[QUANTISONO]; 
 legginomi(pNomi,QUANTISONO); 
 
 cout << endl << "I " << QUANTISONO << " nomi che hai inserito sono " << endl << endl; 
 
 visualizzanomi(pNomi,QUANTISONO); 
 
 delete [] pNomi; //Cancella l'array dal free store 
 pNomi = 0; //Assegna un valore null al puntatore 
 system ("PAUSE"); 
 return 0; 
 } 
 
 void legginomi(string *source,int numelementi) 
 { 
 for (int riga = 0; riga < numelementi; riga++) 
 { 
 cout << "Inserisci il nome #" << riga+1 << " "; 
 getline(cin,source[riga]);
 } 
 } 
 
 void visualizzanomi(string *source,int numelementi) 
 { 
 for (int riga = 0; riga < numelementi; riga++) 
 { 
 cout << source[riga] << endl; 
 } 
 }
Non ho provato a compilare, ma dovrebbe essere ok.
Il discorso del wrapper e' semplicemnte di definire una funzione "attorno" ad un'altra in modo da non dover riscrivere sempre lo stesso codice (nell'esempio che ho fatto, la conversione da char* a string)
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2004, 19:35   #5
lucas72
Senior Member
 
L'Avatar di lucas72
 
Iscritto dal: Aug 2002
Messaggi: 3992
grazie ho risolto
il codice che ho scritto è simile a quello che mi hai suggerito.
a questo punto mi chiedevo come si fa a determinare quante parole
sono contenute in una stringa
ad esempio :
"Ciao come stai?"

le parole della stringa sono 3.

Ho messo di proposito più di uno spazio vuoto tra 2 parole
in quanto la mia prima soluzione prevedeva di contare gli spazi vuoti
ed aggiungere 1, ma non è troppo precisa come è dimopstrato sopra.
suggerimenti?

a proposito una stringa quanto può essere lunga?
lucas72 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2004, 21:59   #6
lucas72
Senior Member
 
L'Avatar di lucas72
 
Iscritto dal: Aug 2002
Messaggi: 3992
aiuto!
lucas72 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2004, 22:47   #7
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Ti scorri la stringa posizione per posizione, se nella posizione i c'è un carattere diverso dallo spazio e nella posizione (i-1) c'era uno spazio o (i-1) < 0, incrementi il contatopre di parole. La stringa penso che possa essere lunga quanto ti pare, memoria permettendo.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2004, 23:35   #8
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originariamente inviato da lucas72
aiuto!
Non ricordo se c'e' un metodo apposito nella libreria standard, ma non mi sembra.
La cosa piu' semplice che mi viene in mente e' la seguente:

Codice:
#include <vector>
#include <cctype>

using namespace std;

vector<string> split( const string& s )
{
  string::size_type i;
  vector<string> result;
  do
  {
    while( i < s.size() && isspace( s[i] ) )
      ++i;
    string s2;
    if ( i == s.size() ) break;
    while( i < s.size() && !isspace( s[i] ) )
      s2+=s[i++];
    result.push_back( s2 );
  } while( i < s.size() );
  return result;
}
Che ti ritorna (dovrebbe, l'ho scritta al volo) un vector con tutte le parole
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2004, 23:44   #9
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
wops, come non detto, le devi solo contare.

puoi fare cosi' (dovrebbe essere abbastanza comprensibile)

Codice:
typedef string::const_iterator It;

int count_words( const string& s )
{
  int count,i=0;
  while ( true )
  {
    while( i < s.size() && s[i]==' ')
      ++i;
    if ( i == s.size() ) break;
    while( i < s.size() && s[i] != ' ')
      ++i
    count++;
  }
  return count;
}
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Booking.com e OpenAI annunciano SME AI A...
Xiaomi SU7 Ultra: da domani tutti i gioc...
Sharp Inspire Expo 2026: da produttore d...
Razer Synapse Web è realtà...
Concessionarie Audi chiudono improvvisam...
Resident Evil Requiem: 4K, 60 FPS e ray ...
Le batterie LFP sono piccole e pesanti? ...
Motorola inarrestabile: nuova serie moto...
Decima generazione Pokémon: grafi...
Una nuova legge consente di rottamare un...
Google mostra per sbaglio Android per PC...
Tesla non convince più: crolla il...
OpenAI lancia Prism: l'AI ora lavora fia...
Nissan mette i pannelli solari su Ariya:...
Day 3 a Barcellona: la prima di Norris c...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v