Newsgroup: it.comp.programmare
Titolo: barra rovesciata in una stringa in C++.

Ciao a autti.
Mi servirebbe scrivere una funzione in C++ per windows che ,data una
stringa contenente il percorso di un file,per es.: "C:\windows", la
tasformi in " C:\\windows".
Come posso fare?...cosa mi suggerite?.....Io pensavo di analizzare la
stringa n carattere per volta,e aggiungere una barra rovesciata dove
occorre,ma non mi è riuscito di farlo.

 Come posso fare?
MFC?
CString a="C:\windows"
a.Replace("\\","\\\\"); 
-- 
Luc

Luc

 occorre,ma non mi è riuscito di farlo.
Ovvero come perdersi in un bicchiere d'acqua...
#include <strstream>
using namespace ::std;
char* addBackSlash(char* pStrP)
{
   int idx = 0;
   int strLen = 0;
   strstream resStr;
   strLen = strlen(pStrP);
   while(idx < strLen)
   {
      if('\\' == pStrP[idx])
          resStr << pStrP[idx];
       resStr << pStrP[idx];
       idx++;
   }
   resStr << ends;
   return resStr.str();
}
int main(int argc, char* argv[])
{
   char* pP = addBackSlash(argv[0]);
   return 0;
}
Fara' un po' schifo, ma funziona.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Sarà vero che mi perdo in un bicchier d'acqua,ma sono anche
all'inizio...
Coamunque grazie per il codice,
Alberto.

 Coamunque grazie per il codice,
Come ti ho detto, il codice non e' che sia da incorniciare.
Probabilmente fara' accapponare la pelle a qualsiasi programmatore C++
leggermente migliore di me (e ci vuole poco).
Il codice ha altri difetti. Il primo e' la totale assenza di
controlli sul puntatore pasato alla funzione, il secondo e' che
la stringa restituita dalla funzione deve essere liberata
esplicitamente mediante delete.
Ha il vantaggio di essere molto semplice e comprensibile.
HTH


Ti farei un'altra domanda,se non ti secca:
Mi puoi fare un esempio di una funzione che passa una matrice di stringhe ad
un'altra funzione, e della funzione che,appunto,riceve la matrice (mi
servirebbe soprattutto vedere le dichiarazioni delle funzioni, e la funzione
return che passa la matrice)...
anche la variante del vettore di puntatori a caratteri al posto della
matrice di stringhe,mi piacerebbe vedere.
Se hai già scritto del codice,potrestoi fare un copia - incolla.
Ciao e grazie in anticipo.

 wrote
in message news:SYEjb.42008$
vO5.1...@twister1.libero.it

Il prototipo di una funzione che accetta una matrice di stringhe
(oppure un array di puntatori a stringhe) e restituisce una matrice
di stringhe (oppure un array di puntatori a stringhe) e' sempre
char** fnc(char**);
Visto che mi incasino sempre, sono particolarmente allergico alle
matrici di stringhe. Personalmente preferisco passare array di
puntatori a stringhe in modo da non dovermi preoccupare di quanti
elementi passo (ovviamente se devo passare N stringhe, l'array di
puntatori ha N+1 elementi con l'ultimo NULL).
Di conseguenza il codice avra' una struttura tipo
char** fnc(char** pStrPP)
{
   int    idx = 0;
   char** resPP = NULL;
....
   while(NULL != pStrPP[idx])
   {
      elabora pStrPP[idx]
      modifica resPP;
      idx++
   }
   return resPP;


Ciao,mipareva di averti risposto,ma evidentemente mi sbagliavo.
Grazie per le indicazioni,grazie alle quali ho potuto scrivere delle
funzioni che si passano dei valori come si deve.
La forma **nomevariabile può essere utilizzata anche per dichiarare
matrici seza specificare le dimensioni di righe e colonne? (in caso
non si possa conoscere a priori quante righe e colonne dovrebbe
memorizzare una matrice):
In effetti,se nel visual basic esiste il comando redim,relativo alle
matrici, dovrà esserci qualcosa per ottenere lo stesso risultato anche
col C++,giusto?
Ciao,
Alberto

 col C++, giusto?
Sbagliato :-)
In C++, matrice, una volta definita, non e' piu' ridimensionabile.
Purtroppo la mia conoscenza del C++ e' quasi agli sgoccioli.
Sicuramente esiste qualche classe che fa quello che cerchi senza dover
ricorrere a realloc() (che serve per ridimensionare la memoria dinamica
allocata con *alloc())
Se ti rivolgi a it.comp.lang.c++ qualcuno sapra' auitarti meglio del
sottoscritto.
