Niedopasowanie listy argumentów,funkcja find

0

Cześć
Proszę, na wstępie, o wyrozumiałość. Uczę się do tej pory z książki Symfonia c++, nie mam za sobą programów z poza zakresu zadań tej książki. To tyle o mnie. Co do problemu to...

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

string rozszerzenie(string nazwa);
/*******************************************/
int main()
{
    string nazwa_pliku;
    cout<<"Podaj nazwe pliku\n";
    cin>>nazwa_pliku;
    nazwa_pliku = rozszerzenie(nazwa_pliku);
}
/******************************************/
string rozszerzenie(string nazwa)
{
    int pozycja;
    pozycja = find(".txt");
}

W takim oto programie(ćwiczeniu), którego zadaniem ma być usuwanie rozszerzenia z nazwy pliku(nie doszedłem do momentu usuwania bo na tym etapie na razie mam błąd), w miejscu

 pozycja = find(".txt")

wyskakuje błąd o następującej treści:
no matching function for call to 'find(const char [5])'|. Następne linijki mówią o tym jakie dopasowania są najbliższe. Przeglądałem dokumentację, czytałem odpowiednie rozdziały w książce, szukałem w internecie ale nic nie znalazłem. O co chodzi? Używam CodeBlocks12.11 na windowsie 7, ale na debianie(7) wyskakuje mi ten sam błąd. Jeśli potrzeba jeszcze jakieś dane to piszcie.

1

Komunikat jest prosty: "'find': identifier not found"
Moja propozycja rozwiązania zadania:

 
#include <iostream>
#include <string>
using namespace std;
 
string rozszerzenie(string nazwa);
/*******************************************/
int main()
{
    string nazwa_pliku;
    cout<<"Podaj nazwe pliku\n";
    cin>>nazwa_pliku;
    nazwa_pliku = rozszerzenie(nazwa_pliku);
    cout<<"Nazwa pliku bez rozszerzenia: "+nazwa_pliku;
}
/******************************************/
string rozszerzenie(string nazwa)
{
    int pozycja;
    pozycja = (int) nazwa.find(".");
    nazwa = nazwa.substr(0,pozycja);
    return nazwa;
}
1

Spróbuj tak

string rozszerzenie(string nazwa)
{
    size_t pozycja;
    pozycja = nazwa.find(".txt");
}

a dalej pomyśl samemu.

1

Jednak podam alternatywną wersje:

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

//string RemoveFileExt(const string &nazwa) { return nazwa.substr(0,nazwa.find(".")); } // patrz komaentarze
string RemoveFileExt(const string &nazwa) { return nazwa.substr(0,nazwa.rfind(".")); }

int main(int n,char *p[])
  {
   cout<<RemoveFileExt("file.txt")<<endl;
   cout<<RemoveFileExt("x:\\sciezka.z\\kropkami\\file.txt")<<endl; // bez rfind tu będzie krucho
   cout<<RemoveFileExt(p[0])<<endl;
   return 0;
  }
0

Dziękuję Wam za wszystkie podpowiedzi. Sprawdziłem wszystkie podane przez Was opcje. Mam tylko dwa pytania dodatkowe:

  1. Czy zapis (int) to efekt potrzeby jakiegoś rzutowania?(do Blondi)
  2. Czy size_t to aktualnie właściwa forma? W książce autor podaje wszędzie size_type, a kompilator wyrzuca przy takiej wersji błąd. Czy to efekt zmiany standardu?(do _matej)

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