/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
[c++] string replace
Fra : Kasper Lindberg


Dato : 05-06-06 13:03

hej NG,

hvordan erstatter man nemmest "\n" med "\r\n", givet en lang tekststreng der
indeholder et ukendt antal linieskift (i form af _kun_ "\n")

Jeg har fundet mange beskrivelser af replace-funktioner, men ikke nogen hvor
man angav hvilken streng der skulle erstattes, og med hvad.

mit bedste bud er at kopiere tekstrengen, tegn for tegn, og indsætte "\r"
når jeg finder et "\n". --> Overkill

/Kasper



 
 
Mogens Hansen (05-06-2006)
Kommentar
Fra : Mogens Hansen


Dato : 05-06-06 13:30


"Kasper Lindberg" <NoSp@m.invalid> wrote in message
news:44841d9b$0$15786$14726298@news.sunsite.dk...
> hej NG,
>
> hvordan erstatter man nemmest "\n" med "\r\n", givet en lang tekststreng
> der indeholder et ukendt antal linieskift (i form af _kun_ "\n")
>
> Jeg har fundet mange beskrivelser af replace-funktioner, men ikke nogen
> hvor man angav hvilken streng der skulle erstattes, og med hvad.

#include <string>

int main()
{
using namespace std;

string s = "This is line 1\n"
"This is line 2\n"
"This is line 3\n";
for(string::size_type i = s.find("\n"); string::npos != i; i =
s.find("\n", i + 2)) {
s.replace(i, 1, "\r\n");
}
}

Venlig hilsen

Mogens Hansen



Kasper Lindberg (05-06-2006)
Kommentar
Fra : Kasper Lindberg


Dato : 05-06-06 15:45


"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:448423e8$0$67263$157c6196@dreader2.cybercity.dk...
>
> "Kasper Lindberg" <NoSp@m.invalid> wrote in message
> news:44841d9b$0$15786$14726298@news.sunsite.dk...
>> hvordan erstatter man nemmest "\n" med "\r\n", givet en lang tekststreng
>> der indeholder et ukendt antal linieskift (i form af _kun_ "\n")
>>
> #include <string>
>
> int main()
> {
> using namespace std;
>
> string s = "This is line 1\n"
> "This is line 2\n"
> "This is line 3\n";
> for(string::size_type i = s.find("\n"); string::npos != i; i =
> s.find("\n", i + 2)) {
> s.replace(i, 1, "\r\n");
> }
> }
>

takker.
jeg skrev dog lidt videre på den så den blev lidt mere generel


void VBReplace(string* str, string str_search_for, string str_replace_with){
size_t searchlen=str_search_for.length();
for(string::size_type i = (*str).find(str_search_for,0);string::npos != i;
i = (*str).find(str_search_for, i +
searchlen+1)) {
(*str).replace(i, searchlen, str_replace_with);
}
}

/Kasper



Mogens Hansen (05-06-2006)
Kommentar
Fra : Mogens Hansen


Dato : 05-06-06 16:09


"Kasper Lindberg" <NoSp@m.invalid> wrote in message
news:448443a7$0$15783$14726298@news.sunsite.dk...
>
> "Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse

[8<8<8<]

Jeg ville ændre

> void VBReplace(string* str, string str_search_for, string
> str_replace_with){
> size_t searchlen=str_search_for.length();

til
(string& str, const string& str_search_for, const string& str_replace_with)

str ændres fra "pointer to string" til "reference to string" for at indikere
at det er påkrævet at string objektet findes.
str_search_for og std_replace_with ændres til "const reference to string"
for at undgå at der oprettes en kopi, og for at indikere at funktionen ikke
ændrer på objektet.

[8<8<8<]
> size_t searchlen=str_search_for.length();

til
const string::size_type searchlen=str_search_for.length();


Venlig hilsen

Mogens Hansen



Soeren Sandmann (07-06-2006)
Kommentar
Fra : Soeren Sandmann


Dato : 07-06-06 17:45

"Mogens Hansen" <mogens_h@dk-online.dk> writes:

> #include <string>
>
> int main()
> {
> using namespace std;
>
> string s = "This is line 1\n"
> "This is line 2\n"
> "This is line 3\n";
> for(string::size_type i = s.find("\n"); string::npos != i; i =
> s.find("\n", i + 2)) {
> s.replace(i, 1, "\r\n");
> }
> }

Er den algoritme ikke O(n^2)? Jeg formoder at s.replace() er lineaer i
laengden af s. Algoritmen der kopierer til en ny streng er O(n), saa
hvis strengene kan vaere lange, er den nok et bedre valg.



Thorsten Ottosen (06-06-2006)
Kommentar
Fra : Thorsten Ottosen


Dato : 06-06-06 11:38

Kasper Lindberg wrote:
> hej NG,
>
> hvordan erstatter man nemmest "\n" med "\r\n", givet en lang tekststreng der
> indeholder et ukendt antal linieskift (i form af _kun_ "\n")
>

Prøv at se

http://www.boost.org/doc/html/string_algo/usage.html#id2742991

-Thorsten

Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407950
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste