Witam
zadanko z symfonii
W pewnym między narodowym urządzeniu badawczym jest piętnaście identycznych modułów. Ich nazwy składają się z trzonu np. “Cluster_”, za którym następuje jednoliterowy symbol. Oto stosowne litery: ABCDEFGJKLMNPQR Na pierwszy rzut oka wydaje się, że są to kolejne litery alfabetu, ale są tu wyjątki. Nie ma litery ‘H’ (…) Nie ma litery ‘I’ (…) Nie ma litery ‘O’. Napisz funkcję, która pełną nazwę modułu przysłaną do niej jako argument - (na przykład Cluster_M) rozpozna w taki sposób, że jako rezultat (typu int) zwróci numer modułu. Ów numer - to jakby numer litery, wg porządku, w jakim widzisz je napisane powyżej. (Numerujemy od zera). Na przykład nazwa “Cluster_M” - określa moduł numer 10.
od razu sposob rozwiazania
#include
#include
using namespace std;
int funkcja(string a) ;
//////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
string napis ;
cin>>napis ;
funkcja(napis) ;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
int funkcja(string a)
{
string mozliwosci ="ABCDEFGJKLMNPQR" ; //
string symbol = a.substr(8,1) ; //bierze jedna litere
int i;
for(i=0; ; i++)
{
if(symbol == mozliwosci.at(i)) //jezeli to 'ta' literka wypisuje ja
{
cout<
break;
}
}
return i ;
}
[/code]
Mam problem z linijka 23 -coś jest źle -> nie wiem też czy sposób rozwiązania jest ,w miarę" poprawny(pewnie rodzaj petli mógłby być trochę inny)
z góry thx
Fiolek
(Fiołek)
6 Maj 2010 12:39
#2
Kmbinujesz
std::string ma taką funkcję jak find która poszukuje w ciągu danego znaku lub podciągu i zwraca jego indeks(liczone od 0). Czyli zamiast pętli powinno być:
string mozliwosci = /*...*/;
char symbol = a[a.size() - 1]/* *a.rbegin() też może być*/; //Ostatni znak.
int i = mozliwosci.find(symbol) /*+ 1*/; //To +1 jest po to, by wynik był od 1, nie od 0.
@EDIT : moja wina, nie doczytałem treści zadania.
_alex
([alex])
6 Maj 2010 13:09
#3
char symbol = a.substr(8,1) ; //bierze jedna litere
Poco ta pętla skoro i tak wypisze 8, o ile w napisie “mozliwosci” nie będzie powtarzających się literek?
dzięki fiołek właśnie o taką pomoc mi chodziło
widziałem na forach niemądre rozwiązania typu case i zwracane wartości no-sens a o find nie pomyślałem
_alex
([alex])
6 Maj 2010 17:46
#5
Fiołek , numeracja ma być od zera, patrz zadanie. Więc całość może wyglądać następująco:
int funkcja(const string &nazwa) { return string("ABCDEFGJKLMNPQR").find(nazwa[8]); } [/code]