• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zamiana liter c++

Object Storage Arubacloud
+1 głos
545 wizyt
pytanie zadane 6 lutego 2021 w C i C++ przez LinosiK Obywatel (1,920 p.)

Cześć, muszę napisać program który wczyta z pliku:
 

Ala ma kota
a kot ma Ale.

natomiast wypisze:

alA mA kotA
A kot mA ale.
Zamienilem 5 wystapien 'a' na 'A' oraz 2 wystapienia 'A' na 'a'. 

posiadam taki kod:
 

#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int a, b;
	string znak;
	ifstream odczyt("dane.txt");

	if(odczyt.is_open())
	{
		char wiersz[10000];//maksymalnie 9999 znaków w wierszu
		while(odczyt.getline(wiersz,10000)) //dopóki jest co czytać
		{
			if(wiersz > 95) //gdy napotkamy małą literę zamieniamy ją na dużą
                cout<<(char)(wiersz-32); //przesuwając o 32 miejsca w kodzie ASCII
            else
                cout << wiersz << endl;
               //cout<<wiersz<<endl;
		}
	}
	else
		cout<<"Nie udało się otworzyć pliku";

	return 0;
}

Lecz niestety nie chce mi działać, pokazuje błąd w if ale nie wiem o co chodzi, prosiłbym o pomoc

1 odpowiedź

+1 głos
odpowiedź 6 lutego 2021 przez VBService Ekspert (254,300 p.)
wybrane 17 lutego 2021 przez LinosiK
 
Najlepsza

Propozycja bez:  char wiersz[10000];  wink  w odniesieniu do tego kodu co podałeś,

dane.txt

Ala ma kota
a kot ma Ale.
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    fstream plik;
    plik.open("dane.txt", ios::in);
 
    if(plik.is_open())
    {
        string wiersz;
        while (getline(plik, wiersz))
        {
            for (int i=0; i<wiersz.size(); ++i)
            {
                if (wiersz[i] == 13) 
                    cout << endl;
                else 
                {
                    if (wiersz[i] != 32 && wiersz[i] >= 65)
                    {
                        if (wiersz[i] >= 97 && wiersz[i] <= 122) //gdy napotkamy małą literę zamieniamy ją na dużą
                            cout << (char)(wiersz[i]-32); //przesuwając o 32 miejsca w kodzie ASCII
                        else
                            cout << (char)(wiersz[i]+32);
                    } else
                        cout << wiersz[i];
                }
            }            
        }
    }
    else
        cout<<"Nie udało się otworzyć pliku";
        
    plik.close();
 
    return 0;
}

ale tu, aż "się prosi" o użycie switch-a,

#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    fstream plik;
    plik.open("dane.txt", ios::in);
 
    if(plik.is_open())
    {
        string wiersz;
        while (getline(plik, wiersz))
        {
            for (int i=0; i<wiersz.size(); ++i)
            {
                switch (wiersz[i])
                {
                    case 13:
                        cout << endl;
                        break;
                    case 65 ... 90:
                        cout << (char)(wiersz[i]+32);
                        break;
                    case 97 ... 122:
                        cout << (char)(wiersz[i]-32);
                        break;                        
                    default:
                        cout << wiersz[i];
                }
            }            
        }
    }
    else
        cout<<"Nie udało się otworzyć pliku";
        
    plik.close();
 
    return 0;
}

żeby uzyskać ten efekt, co poniżej, na "wyjściu", spróbuj dalej sam przerobić kod  wink

alA mA kotA
A kot mA ale.
Zamienilem 5 wystapien 'a' na 'A' oraz 2 wystapienia 'A' na 'a'.

 

 

komentarz 7 lutego 2021 przez mokrowski Mędrzec (155,660 p.)

Hmm.. jakoś liczenie liter idzie mi .. inaczej...

Zamienilem 5 wystapien 'a' na 'A' oraz 2 wystapienia 'A' na 'a'.

To ile jest tych małych i dużych?

Podobne pytania

–1 głos
1 odpowiedź 1,764 wizyt
pytanie zadane 28 maja 2017 w C i C++ przez Norbert123 Początkujący (290 p.)
0 głosów
1 odpowiedź 3,057 wizyt
pytanie zadane 9 lutego 2017 w C i C++ przez robRoy Użytkownik (970 p.)
+1 głos
3 odpowiedzi 3,440 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Don Corleone Obywatel (1,210 p.)

92,620 zapytań

141,474 odpowiedzi

319,813 komentarzy

62,004 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...