Trzy programy w C++

gosia19
Użytkownik
Użytkownik
Posty: 350
Rejestracja: 9 maja 2008, o 18:18
Płeć: Kobieta
Podziękował: 70 razy
Pomógł: 20 razy

Trzy programy w C++

Post autor: gosia19 »

1. Wczytaj łańcuch znaków. Policz duże litery, małe oraz spacje.
2. Wczytaj łańcuch znaków. Zamień duże litery na małe i odwrotnie.
3. Wczytaj łańcuch znaków. Policz ile razy w tym łańcuchu występuje trójka ”abc”.

Będę wdzięczna za każde rozwiązanie.
spammer
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 15 sty 2009, o 17:28
Płeć: Mężczyzna
Podziękował: 40 razy
Pomógł: 12 razy

Trzy programy w C++

Post autor: spammer »

Siema mam na razie 3:
Ukryta treść:    
edit:

Co do 2 to nie wiem dokładnie czy ma być tak, że wczytuje i duże i małe litery czy tylko któreś z nich. Jeżeli o to 2 chodzi to mam
Ukryta treść:    
Jeżeli chodzi o te tablice z literami możesz je modyfikować wg własnych potrzeb

edit:

No jest już i 1 zadanie:
Ukryta treść:    
gosia19
Użytkownik
Użytkownik
Posty: 350
Rejestracja: 9 maja 2008, o 18:18
Płeć: Kobieta
Podziękował: 70 razy
Pomógł: 20 razy

Trzy programy w C++

Post autor: gosia19 »

Ojeju dzięki bardzo Jakbym mogła to bym Ci dała za to 10 plusików A w tym drugim chodziło oto, żeby małe zmienić na duże a duże na małe, ale mam nadzieje, że z tym już sobie poradzę
Jeszcze raz dzięki :*
Dumel
Użytkownik
Użytkownik
Posty: 2000
Rejestracja: 19 lut 2008, o 17:35
Płeć: Mężczyzna
Lokalizacja: Stare Pole/Kraków
Podziękował: 60 razy
Pomógł: 202 razy

Trzy programy w C++

Post autor: Dumel »

te programy mozna zrobic szybciej z uzyciem funkcji toupper() i tolower(), ktore zamieniaja podaną litere na odp: dużą i małą. np czy litera x jest duża sprawdzamy tak:

Kod: Zaznacz cały

if(x==toupper(x)){}
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Trzy programy w C++

Post autor: matshadow »

Program 3 zły. Pow wpisaniu np. "abccc", program powinien wypisać 1, a wypisuje 3. Poprawny wygląda tak:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main()
{
    string text;
    int ile=0,i=0; 
    getline(cin,text);
    while(i<text.size())
    {
        int k=text.find("abc",i);
        if(k<0) break;
        else ile++;
        i=k+1;
    }
    printf("%d
",ile);
    return 0;
} 
spammer
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 15 sty 2009, o 17:28
Płeć: Mężczyzna
Podziękował: 40 razy
Pomógł: 12 razy

Trzy programy w C++

Post autor: spammer »

Ojej nie zrobiłem takiego testu. Ale to takie dziwne, niby mam w tablicy "abc" a on szuka nie całego ciągu a liter........
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Trzy programy w C++

Post autor: kadiii »

Spammer, twój program nie wiadomo w ogóle jakim cudem sie kompiluje - to tylko dzięki wyrozumiałości kompilatora.

Kod: Zaznacz cały

char trojka = {'abc'}; //tablica liter
to nie jest deklaracja tablicy liter tylko deklaracja jednego chara ,któremu akurat z powodów implementacyjnych przypisuje kompilator ostatnią literę łańcucha, czyli c. Tablicę deklarujemy tak:

Kod: Zaznacz cały

char trojka[]={"abc"}
Oczywiście nie mógłbyś wtedy użyć metody rozwiązania , której użyłeś.
Kolega matshadow użył w swoim rozwiązaniu zgrabnej i bardzo użytecznej funkcji find. Oczywiście jeżeli chodziło w tym zadaniu aby takowych nie używać to można by przy takim krótkim wzorcu - abc użyć takiego algorytmu: przeszukuj kolejne litery łańcucha od 3, jeśli znajdziesz c, to sprawdź, czy poprzednia jest b, i jeśli tak, to sprawdź, czy poprzednia to a. Jeśli tak, to zwiększ ile o 1. Kontynuuj aż do końca łańcucha.
Jesli chciałabyś (tu kieruje słowa do autorki) podejść do zadania metodycznie to mogłabyś użyć jednego z algorytmów do wyszukiwania wzorca K-M-P, Boyera- Moore'a, Rabina-Karpa(każdy o różnej specyfice) czy jeszcze jakiś inny. Oczywiście to tylko jesli chciałabys to wykonać pożądnie(co nie wydaje sie akurat celem tego zadania). Zawsze jednak warto dowiedzieć się o czymś innym.
Pozdrawiam
gosia19
Użytkownik
Użytkownik
Posty: 350
Rejestracja: 9 maja 2008, o 18:18
Płeć: Kobieta
Podziękował: 70 razy
Pomógł: 20 razy

Trzy programy w C++

Post autor: gosia19 »

matshadow, dzięki za poprawny program
A czy ktoś mogłby jeszcze zrobić taki program:
Wczytaj łańcuch znaków. Wyświetl go od końca do początku.
Każda pomoc mile widziana
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Trzy programy w C++

Post autor: kadiii »

Kod: Zaznacz cały

#include <iostream>
using namespace std;
main()
{
 string lancuch;
 int i;
 getline(cin,lancuch);
 for(i=0;i<lancuch.length();i++)
 {
  if((lancuch[i]>='a')&&(lancuch[i]<='z'))
   lancuch[i]-=32;
  else if((lancuch[i]>='A')&&(lancuch[i]<='Z'))
   lancuch[i]+=32;
  //dla reszty nie robimy nic
 }
cout<<lancuch<<endl;
 return 0;
}
edit: to kod do zamiany znaków
a to do wypisania odwrotnie

Kod: Zaznacz cały

#include <iostream>
using namespace std;
main()
{
 string lancuch;
 int i;
 getline(cin,lancuch);
 for(i=lancuch.length();i>=0;i--)
  cout<<lancuch[i];
 return 0;
}
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Trzy programy w C++

Post autor: matshadow »

Kod: Zaznacz cały

#include<iostream>
#include<algorithm>
using namespace std;
main()
{
    string a;
    getline(cin,a);
    reverse(a.begin(),a.end());
    cout<<a<<endl;
    return(0);
}
gosia19
Użytkownik
Użytkownik
Posty: 350
Rejestracja: 9 maja 2008, o 18:18
Płeć: Kobieta
Podziękował: 70 razy
Pomógł: 20 razy

Trzy programy w C++

Post autor: gosia19 »

Wcześniej zamiast programu wyświetlającego łańcuch od końca do początku, było zadanie, żeby zamienić wszystkie litery a w łańcuchu na z. Wykasowałam je bo sama sobie z nim poradziłam, ale teraz widze, że kadii masz inaczej. Ja napisałam to tak:

Kod: Zaznacz cały

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

int main()
{
    string text ;
    
    getline(cin,text);
    
    for(int i = 0;i<text.length();i++)
    {
      if(text[i]==97)
      {
      text[i] = 122;
      }
    } cout << text;
    
    cout << "
";
    system("pause");
    return 0;
}
Ja się na programowaniu nie znam, niby ten program działa, ale czy on jest "ładny", że tak powiem?
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Trzy programy w C++

Post autor: matshadow »

korzystasz z kodu ascii każdego znaku. Jak ci przyjdzie zamienić l na b to mogą być kłopoty bez znajomości kodów ascii tych liter. Dlatego imho uniwersalniej jest zapisać:
if(text=='a') text='z';
gosia19
Użytkownik
Użytkownik
Posty: 350
Rejestracja: 9 maja 2008, o 18:18
Płeć: Kobieta
Podziękował: 70 razy
Pomógł: 20 razy

Trzy programy w C++

Post autor: gosia19 »

I wiem czemu mi nie działało, bo nie użyłam
Dziękuję bardzo wszystkim za pomoc
ODPOWIEDZ