Tablice, string, operacje na string

5

Hej! Moja dziewczyna ma drobne problemy z programowaniem na studiach, ma zadanie o takiej tresci :

Podaj definicje funkcji o nagłówku
void NazwyPlikow(string naz[],int ile);
która dla zadanej tablicy nazw plików wraz
z rozszerzeniami wyswietli nazwy plików bez
rozszerzen oraz w nawiasach liczbe znaków
nazwy.
Przykład: Jezeli
naz = ["dane.txt", "art.tex",
"zdjecie.jpg", "strona.html"];
ile = 4;
to nalezy wyswietlic:
dane (4)
art (3)
zdjecie (7)
strona (6)

Napisalem jej taki program :


#include <iostream>
#include <string>

using namespace std;

void NazwyPlikow(string naz[], int ile)
{   string nazwa_bez_rozszerzenia = "";
    for (int i=0;i<ile;i++)
    {
        nazwa_bez_rozszerzenia = naz[i];
        cout << "Nazwa oryginalna : " << naz[i] << endl;
        nazwa_bez_rozszerzenia = naz[i].substr(0, naz[i].size()-4);
        cout << "Nazwa bez rozszerzenia : ";
        cout << nazwa_bez_rozszerzenia << " (" << nazwa_bez_rozszerzenia.length() << ")" << endl;
        cout << "=========================================" << endl;
    }
}

int main()
{
    string tablica1[]= {"dane.txt", "art.tex", "zdjecie.jpg", "strona.htm"};
    string tablica2[]= {"dokument.txt", "program.exe", "zdjecie.bmp", "index.htm"};
    int ile = 4;

    NazwyPlikow(tablica1, ile);
    cout << "*********************************" << endl;
    NazwyPlikow(tablica2, ile);

    return 0;
}

Kompiluje się i działa poprawnie, ale czy wykladowca zaliczy mu to ? Chodzi, o to ze korzystam ze string a nie np char i metod w klasie string...

Sorki jak to nieoptymalnie napisane, ale ja niekonczylem informatyki (tylko psychologie, z informatyki mam tylko technika po studium i podyplomowke z zarzadzania projektami IT).

1

Moim zdaniem jest ok, przy czym rozszerzenie ucinałbym na zasadzie: od ostatniej kropki do końca, bo masz przecież rozszerzenia .html, .jpeg itd które maja 4 a nie 3 znaki!

3

No tez tak o tym myslalem, ze rozszerzenie moze miec (obecnie) i 4 literki..
Swoja droga to dziwne,ze mgr psychologii pisze programy w C++ studentce informatyki...No ale zawsze dla mnie programowanie bylo hobby (aczkolwiek kiedys napisalem komercyjny program do ukladania testow i testowania).

0
string str="Madzia.html";
string str2;
size_t pos = str.find(".");
str2 = str.substr (0,pos);   
cout << str2 << endl;

Obecnie studiowanie informatyki idzie w tym kierunku, że Pani ze sklepu będzie pisać programy studentom..

0

@up źle, sprawdź dla "Madzia.Jotpegowa.jpeg" ;)
powinno być oczywiście find_last_of

0

Racja.. Nie przewidziałem, że w nazwach plików może być więcej kropek...

void NazwyPlikow(string tab[],int size){
    for(int i=0;i<size;i++){
        size_t pos = tab[i].find_last_of(".");
        cout << tab[i].substr(0,pos) << endl;
    }
}

lub bez zmiennej:

void NazwyPlikow(string tab[],int size){
    for(int i=0;i<size;i++)
        cout << tab[i].substr(0,(tab[i].find_last_of("."))) << endl;
}

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