2009-02-27, 02:36
  #1
Medlem
R.W.Cheeses avatar
Tror mitt problem ligger i att kasta om en variabel på rätt sätt men har googlat sönder mig totalt ikväll..

Behöver ersätta ett tecken i en string med "placeringstalet" av samma tecken i en referenssträng. "Placeringstalet" (bättre ord?) får jag med string::find_first_of men string::replace vill inte ta emot min input.

Har kommenterat koden väl och gett exempel på replace accepterar, om man kör den så ser man tydligt vad jag vill åstadkomma!
Kod:
#include <string>
#include <iostream>
#include <algorithm>
using std::string;
using std::cout;
using std::endl;
using std::replace;

int main()
{
   string s("c13s4d11h5");
   string reference("shdc");
   int foundLetters = 0;
   
   cout << "Ej bearbetad:\t" << s << endl << endl;
   cout << "Referens:\t" << reference << endl;
   cout << "Fung. ref:\t";
   
   for (int i = 0; i < s.length(); i++){  // Repetera följande genom hela strängen:
      if (isalpha(s[i])){           // När en bokstav påträffas i 's' ...
         foundLetters ++;           // ... memorera träffen ...
         cout << s[i] << "=" << reference.find_first_of(s[i]) << " " ; // ... visa en giltig referens ...
/*OK*/   s.replace(i, 1, ".");      // ... ersätt bokstaven med motsvarade bokstavs PLATS i 'reference', alltså en siffra.
//*EJ OK*/s.replace(i, 1, reference.find_first_of(s[i]));  // < men är ej EJ OK. Kastas om hur?
      }
   }
   
   cout << endl;
   cout << "Bokstäver:\t" << foundLetters << endl;
   cout << "Bearbetad:\t" << s << endl << endl;
   cout << "Istället för punker vill jag visa 'referenstalet' men får felmedd.:\n> ogiltig konvertering från 'size_t' till 'const char*' <";
   
   return 0;
}
Kör linux och kompilerar med G++, så särskilda Borland/Microsoft-lösningar undanbedes vänligast
Så här ser hela felmeddelandet ut:
string::find_first_of:
http://www.cplusplus.com/reference/s..._first_of.html

string::replace:
http://www.cplusplus.com/reference/s...g/replace.html
Citera
2009-02-27, 05:45
  #2
Medlem
R.W.Cheeses avatar
Efter 99 cigaretter och med håriga handflator har jag äntligen funnit lösningen (kunde sagts i en annan forumavdelning också antar jag..)

Slutgiltiga funktionen lyder:
Kod:
inline string size2str(size_t s)
{
   int i = static_cast<int>(s);
   stringstream sstr;
   sstr << i;
   string str1 = sstr.str();
   return str1;
}
Med anropet:
Kod:
s.replace(i, 1, size2str(reference.find_first_of(s[i])));
Huruvida det är en nödlösning eller mycket acceptabelt får någon annan gärna avgöra!

Hjälpen gick att finna i webbläsarens historik... :
http://www.eggheadcafe.com/conversat...eadid=33413830
http://www.gamedev.net/community/for...opic_id=480568
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in