Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Drobny problem z funkcją zwracającą string

Ostatnio zmodyfikowano 2014-07-11 17:08
Autor Wiadomość
Totalq
Temat założony przez niniejszego użytkownika
Drobny problem z funkcją zwracającą string
» 2014-07-11 17:08:58
Program ma sprawdzić, czy podana nazwa pliku przez użytkownika ma rozszerzenie .txt, jeśli nie to ma je dopisać. Chciałem jednak, żeby było ambitnie, więc funkcja w zamyśle sprawdza, czy przypadkiem ".txt" nie występuje po prostu w nazwie ot tak, nie jako rozszerzenie, lecz jako jakiś tam substring (pomijam poprawność takiego nazewnictwa). Adekwatnie do sytuacji dopisuje rozszerzenie .txt i zwraca string. Wprawdzie kod wymaga gruntownej przebudowy, żeby rzeczywiści wyczerpywal wszystkie możliwe przypadki, ale bardziej chodzi mi o niepoprawność funkcji while. Generalnie, całość można, by rozwikłać używając find_last_of, ale ten kod również powinien działać, a nie bardzo chce :/

Oto kod funkcji:

C/C++
string add_ext( string & file_name )
{
    //sprawdzam czy plik ma rozszczerzenie *txt
   
    string::size_type position;
    position = file_name.find_last_of( ".txt" );
   
    if( position != string::npos )
    {
        return file_name;
    }
    //jesli nie
   
    else
    {
        while( 1 )
        {
            static string::size_type position2 = 0;
           
            position2 = file_name.find( '.', position2 );
           
            if( position2 != string::npos )
            {
                if( file_name[ position2 + 1 ] != ' ' ) // jesli po .txt nie ma spacji, to traktuje pozostala czesc jako rozszerzenie pliku (choc tutaj wartoby bylo to badac
                //  od konca uzywajac np. rfind)
               
                {
                    file_name.erase( position2 );
                    file_name.append( ".txt" );
                    break;
                }
               
                else // jesli jest, to szukam dalej
                {
                    position2 += 1;
                   
                    if( position2 >= file_name.length() )
                    {
                        file_name.append( ".txt" );
                        break;
                    }
                   
                    else
                         continue;
                   
                }
            }
        }
       
        return file_name;
       
    }
   
   
}

EDIT: przez godzinę nie udało mi się znaleźć błędu, wystarczyło utworzyć temat i od razu wiem gdzie jest, a jest zaraz na początku. Za bardzo skupiłem się na samej pętli... Przepraszam za problem ;)
P-113630
« 1 »
  Strona 1 z 1