# [C++] zeichen in Char Array ersetzen?



## Fastkiller (18. Dezember 2008)

hallo!

Ich bin noch relativ neu in C++, früher nur C# bzw Java gecodet..
Jetzt steh ich aber an.

Ich habe ein char array:

```
char buffer[256];
```
In dem steht folgendes:


> C:/Programme/Java/test.txt



Wie kann ich nun alle '/' mit '\\' ersetzen?
Ich hab das bisjetzt versucht mit dem folgenden:


```
string str = buffer;
	str.replace(str.find('/'),str.length(),"\\");
```

Da ich das ganze in ner Messagebox ausgeben will müsste ich den string ja in LPCSTR umwandeln -.-

Mit C# gehts ja einfach aber bei C++ steh ich momental total an =(
C#:

```
String str = buffer.Replace("/", "\\");
```

Danke schonmal!

mfg,
Fastkiller


----------



## vfl_freak (18. Dezember 2008)

Moin,

ich weiß nicht, ob ich Deine Frage richtig verstanden habe, aber ein 

```
str.c_str();
```
sollte den String in der gewünschten Form ausgeben!

Gruß
Klaus


----------



## deepthroat (18. Dezember 2008)

Hi.

Die replace Methode von std::string müßtest du wiederholt ausführen, bis keine '/' Zeichen mehr im String enthalten sind.

Verwende lieber die std::replace Funktion:

```
#include <algorithm>
#include <cstring>

std::replace(buffer, buffer + ::strlen(buffer), '/', '\\');
```
Gruß


----------



## Fastkiller (18. Dezember 2008)

deepthroat hat gesagt.:


> Hi.
> 
> Die replace Methode von std::string müßtest du wiederholt ausführen, bis keine '/' Zeichen mehr im String enthalten sind.
> 
> ...



Danke erstmal, allerdings bringt mir das nichts. 
Die Ausgabe sieht dann folgendermaßen aus:

```
C:\Programme\java\test.txt
```
sie sollte aber so aussehen:

```
C:\\Programme\\java\\test.txt
```

Nur wie mach ich das? Hier mein Ansatz:

```
for(int i = 0; i<sizeof(buffer);i++)
	{
		if(buffer[i] == '/')
		{
			buffer[i] = '\\';
		}
	}
	return buffer;
```
Dies führt zu folgender Ausgabe:

```
C:\Programme\java\test.txt
```
Wie kann ich allerdings nun ein Character nach jedem 





> \


einfügen?
_________________________________________________________________________

EDIT: Hab das jetzt folgendermaßen gelöst:


```
char buffer[256]; 
static char buffer2[256];
for(int i = 0,y = 0; i<lstrlenA(buffer);i++,y++)
		{
			if(buffer[i] == '/')
			{
				buffer2[y]='\\';
				y++;
				buffer2[y]='\\';
			}
			else
			{
				buffer2[y]=buffer[i];
			}
		}
		return buffer2;
```

mfg,
Fastkiller


----------



## deepthroat (18. Dezember 2008)

Fastkiller hat gesagt.:


> Danke erstmal, allerdings bringt mir das nichts.
> Die Ausgabe sieht dann folgendermaßen aus:
> 
> ```
> ...


Du solltest lernen deine Anforderungen klar und eindeutig zu formulieren. Wozu soll das ganze denn eigentlich gut sein? Du weißt schon das du unter Windows auch einfach '/' als Verzeichnisseparator verwenden kannst?


Fastkiller hat gesagt.:


> Nur wie mach ich das?


In C++:
	
	
	



```
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <sstream>

#include <cstring>

using namespace std;

string slash2doublebackslash(char c) {
  if (c == '/')
    return "\\\\";
  else 
    return string(1, c);
}

char buf[] = "c:/path/to/program/test.exe";
ostringstream r;

transform(buf, buf + ::strlen(buf), ostream_iterator<string>(r), slash2doublebackslash);

cout << r.str() << endl;
```
Gruß


----------

