Lark
Mitglied
Guten Abend zusammen,
Also ich gehöre zu den C++ Anfängern, also entschuldigt, wenn ich irgendwas nicht wirklich sauber programmiert hab. Könnt mich aber gerne darauf hinweisen.
Und natürlich hab ich auch schon nach einer Lösung gesucht, hab aber keine finden können, sonst hät ich ja auch nicht gefragt.
Naja, nun zu meinem Problem.
Ich habe einmal meine main.cpp und die strfunc.h
in der strfunc.h ist die Klasse "strfunc" deklariert.
Die Funktionen
str.bereich(string str,string start,string end) und
str.str_replace(string str,string search,string replace) greifen beide auf die Funktion
str.spiltstring(string str, string search)
zu.
Hier funktioniert die Funktion spiltstring() noch wunderbar.
Der String wird wie verlangt bei den Leerzeichen getrennt und die einzelnen Abschnitte als Array zurückgegeben.
Hier erfolgt von der Funktion splitstring keine Rückgabe mehr.
Die Bedinung, sind meines Erachtens nach aber doch die Gleichen, wie die bei der obigen Funktion, oder etwa nicht?
Ach ja vlt. noch 2 Worte zu dem Programm selbst.
Das Programm soll einen Text auslesen und dort erst einmal eine Textpassage raussuchen die durch [Anfang] und [Ende] gekennzeichnet ist. In dieser Passage findet man [Pfad] der später durch den Pfad eines Bilder ersetzt werden soll.
Hier noch die beiden Dateien:
main.cpp :
strfunc.h :
Vlt. fällt dem ein oder anderen ja ein Lösungsvorschlag ein.
Vielen Dank,
Marcel
Also ich gehöre zu den C++ Anfängern, also entschuldigt, wenn ich irgendwas nicht wirklich sauber programmiert hab. Könnt mich aber gerne darauf hinweisen.
![Wink ;) ;)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f609.png)
Und natürlich hab ich auch schon nach einer Lösung gesucht, hab aber keine finden können, sonst hät ich ja auch nicht gefragt.
![Smile :-) :-)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Naja, nun zu meinem Problem.
Ich habe einmal meine main.cpp und die strfunc.h
in der strfunc.h ist die Klasse "strfunc" deklariert.
Die Funktionen
str.bereich(string str,string start,string end) und
str.str_replace(string str,string search,string replace) greifen beide auf die Funktion
str.spiltstring(string str, string search)
zu.
Code:
array=str.bereich(row,"[Anfang]","[Ende]");//Dies funktioniert noch
Der String wird wie verlangt bei den Leerzeichen getrennt und die einzelnen Abschnitte als Array zurückgegeben.
Code:
temp = str.str_replace(temp,"[Pfad]","Bild");//Hier funktioniert es nicht mehr.
Die Bedinung, sind meines Erachtens nach aber doch die Gleichen, wie die bei der obigen Funktion, oder etwa nicht?
Ach ja vlt. noch 2 Worte zu dem Programm selbst.
Das Programm soll einen Text auslesen und dort erst einmal eine Textpassage raussuchen die durch [Anfang] und [Ende] gekennzeichnet ist. In dieser Passage findet man [Pfad] der später durch den Pfad eines Bilder ersetzt werden soll.
Hier noch die beiden Dateien:
main.cpp :
Code:
#include <iostream>
#include <fstream>
#include <string>
#include "strfunc.h"
using namespace std;
int main(){
const char *temp_filename="temp.txt"; //Für Temporäre Datei
strfunc str;//Klasse
//Variablen
int start=0,ende=0,y=0;
string *array=new string[5];
string befor;
string between;
string after;
string row,temp;
ifstream input("index.html");//Datei einlesen
while(getline(input,row)){
//input>>row;
array=str.bereich(row,"[Anfang]","[Ende]");//Dies funktioniert noch
if(array[1]=="true"){
start=1;
y=0;
}
if(array[3]=="true"){
ende=1;
start=0;
y=0;
}
temp=array[0]+array[2]+array[4]+"\n";
if(start==0 && ende==0){
befor+=temp;
}else if(start==1){
between+=temp;
}else{
after+=temp;
}
}
input.close();
ofstream otempstream(temp_filename);
otempstream<<between;
otempstream.close();
ifstream itempstream1(temp_filename);
y=0;
while(getline(itempstream1,temp)){
y++;
}
string *temparray=new string[y+1];
itempstream1.close();
ifstream itempstream2(temp_filename);
y=0;
while(getline(itempstream2,row)){
temp=row;
temp = str.str_replace(temp,"[Pfad]","Bild");//Hier funktioniert es nicht mehr.
cout<<endl<<"temp:"<<temp<<endl;
y++;
}
temparray[y]="\0";
itempstream2.close();
ofstream output("temp.html");
output<<befor;
y=0;
output<<after;
}
Code:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class strfunc{
public:
string* spiltstring(string str, string search);
string* bereich(string str,string start,string end);
string str_replace(string str,string search,string replace);
};
string* strfunc::spiltstring(string str, string search){
//Variablen
string::const_iterator x;
string y,wort;
int found=0,z=0;
//Anzahl der Zeichen "Search" ermitteln
for(x=str.begin();x!=str.end();x++){
y=*x;
if(y==search){
found++;
}
}
string *array=new string[(found+2)];//Variablen für die einzelnen Wörter
for(x=str.begin();x!=str.end();x++){
y=*x;
if(y==search){
array[z++]=wort;
wort="";
}else{
wort+=y;
}
}
array[z]=wort;
array[++z]="\0";
return array;
}//spiltstring
string* strfunc::bereich(string str,string start,string end){
//Variablen
string *arr=new string;
string check;
int anfang=0,ende=0,y;
string bfa,btae,ne;
string *array=new string[5];
array[1]="false";
array[3]="false";
arr=spiltstring(str," ");
int x=0;
while(arr[x]!="\0"){
check=arr[x];
if(check==start){
y=0;
anfang=1;
ende=0;
x++;
array[1]="true";
continue;
}
if(check==end){
y=0;
ende=1;
anfang=0;
x++;
array[3]="true";
continue;
}
if(anfang==1){
btae+=" "+check;
}else if(ende==1){
ne+=+" "+check;
}else{
bfa+=" "+check;
}
x++;
}
array[0]=bfa;
array[2]=btae;
array[4]=ne;
return array;
}
string strfunc::str_replace(string str,string search,string replace){
//Variablen
string *array=new string;
string check,ret;
array=strfunc::spiltstring(str," ");
cout<<"array[0]:"<<*array;
int x=0;
while(array[x]!="\0"){
check=array[x];
if(check==search){
check=replace;
}
ret+=" "+check;
x++;
}
return ret;
}
Vlt. fällt dem ein oder anderen ja ein Lösungsvorschlag ein.
Vielen Dank,
Marcel