String.find() nie działa

0

Witam,
mam problem z takim oto kodem

int main()
{
    string a="/zdalny/11zdalny.txt";

    cout<<a<<endl<<cout<<a.find("11");
    getch();
} 

po uruchomieniu program wypisuje 0x4453c48, ma ktos pomysl co jest nie tak?

0

Wszystko jest w jak najlepszym porzadku.
Metoda string::find() zwraca iterator pierwszego elementu pasujacego. Jesli chcesz wyciagnac pozycje, mozesz uzyc funkcji distance. http://www.cplusplus.com/reference/iterator/distance/

0

czyli:

string costam;
iterator first=costam[0];
iterator last=costam.find("fraza");
cout<<distance(first, last);

cos takiego?

0

Zamien costam[0] na costam.begin() i bedzie ok. Tylko ta nazwa last niezbyt pasuje.

0

prawie sie nawet skompilował tylko kompilatorowi sie nie podoba tutaj:

 
    cout<<distance(first, last);

jak sie go zapyta co o tym sądzi to mówi: conversion from size_t' to non-scalar type __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' requested

0

przepraszam zly fragment kodu

    string::iterator znacznik=a.find("11"); 
0

Okej, moj blad.

Zle spojrzalem w dokumentacje (to znaczy kliknalem w zly link) przepraszam.

http://www.cplusplus.com/reference/string/string/find/
Dla stringa find zwraca size_t, wiec cale to zamieszanie jest bezcelowe.

#include <iostream>
#include <string>
using namespace std;

int main() {
	string phrase = "ala ma kota, a kot ma ale";
	size_t found = phrase.find("kot");
	cout << found;
	return 0;
}

http://ideone.com/Wgbo2R

Co do twojego bledu, jest on banalny, tj. robisz cos takiego cout << .... << cout przez to wypisuje taki dziwny efekt.

Poprawiona wersja, dodatkowo ze sprawdzeniem czy w ogole znalazlo (jak nie to wyswietli -1).

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string a="/zdalny/11zdalny.txt";
 	size_t found = a.find("11");
    cout<<a<<endl<< (found != string::npos ? found : -1);
} 
0

Dzięki, działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1