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?
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?
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/
czyli:
string costam;
iterator first=costam[0];
iterator last=costam.find("fraza");
cout<<distance(first, last);
cos takiego?
Zamien costam[0]
na costam.begin()
i bedzie ok. Tylko ta nazwa last
niezbyt pasuje.
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
przepraszam zly fragment kodu
string::iterator znacznik=a.find("11");
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;
}
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);
}
Dzięki, działa.