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

zamiana liter c++

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
721 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 (256,320 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 (156,420 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,843 wizyt
pytanie zadane 28 maja 2017 w C i C++ przez Norbert123 Początkujący (290 p.)
0 głosów
1 odpowiedź 3,428 wizyt
pytanie zadane 9 lutego 2017 w C i C++ przez robRoy Użytkownik (970 p.)
+1 głos
3 odpowiedzi 3,657 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Don Corleone Obywatel (1,210 p.)

93,185 zapytań

142,198 odpowiedzi

322,005 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1835p. - Adrian Wieprzkowicz
  9. 1785p. - Michal Drewniak
  10. 1744p. - rafalszastok
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1365p. - Dawid128
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...