String.find() nie działa

String.find() nie działa
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
mam problem z takim oto kodem

Kopiuj
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?

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
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/

  • Rejestracja: dni
  • Ostatnio: dni
0

czyli:

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

cos takiego?

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
 
    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

  • Rejestracja: dni
  • Ostatnio: dni
0

przepraszam zly fragment kodu

Kopiuj
    string::iterator znacznik=a.find("11"); 
n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
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.

Kopiuj
#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).

Kopiuj
#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);
} 
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki, działa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.