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

C++ wyznaczanie rosnącego napisu z pliku

Object Storage Arubacloud
0 głosów
399 wizyt
pytanie zadane 25 kwietnia 2021 w C i C++ przez Latarnik Użytkownik (650 p.)

Treść zadania::Napis rosnący to taki,w którym kod Ascii każdej kolejnej litery jest większy od poprzedniej.Podaj wszystkie napisy rosnące w występujące pliku NAPIS.TXT 

I czy mógłby mi ktoś pomóc dokończyć to zadanie, poprawić błędy w moim kodzie ?? 

 

Mój kod 


 #include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <math.h>  

using namespace std;
int main()
{
    fstream plik;
    plik.open("NAPIS.txt");
    string wiersz[1000]; 
    int l=1;
    int k=0;
    for(int i=0; i<1000; i++)
    {
        plik>>wiersz[i];
    }
     for(int i=0; i<1000; i++)
     {
     	 for(int j=0; j<wiersz[i].length(); j++)
        {
        	for(int n = 0; n>wiersz[i].length(); n++)
        	{
             	if(int (wiersz[n])<(wiersz[l=l+1])||k<wiersz[i].length()||l<k)
            	{
        	    	cout<<wiersz[i]<<endl;
		    	}
	    	}
 		}
	 }
	return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 25 kwietnia 2021 przez tkz Nałogowiec (42,000 p.)
#include <fstream>
#include <iostream>
#include <optional>
#include <string>

std::optional<std::string> checkString(const std::string &str)
{
    for (std::size_t i{1}; i < str.size(); ++i)
    {
        if (static_cast<int>(str.at(i - 1)) > static_cast<int>(str.at(i)))
        {
            return std::nullopt;
        }
    }
    return str;
}

int main()
{
    std::ifstream file("data.csv");
    std::string line;
    while (std::getline(file, line))
    {
        if (checkString(line).has_value())
        {
            std::cout << line << std::endl;
        }
    }
}

 

0 głosów
odpowiedź 25 kwietnia 2021 przez tangarr Mędrzec (154,860 p.)

Po co ci ta tablica? Szkoda na nią pamięci. A co jeżeli w pliku będzie 1001 słów lub więcej?

Użyj następującej konstrukcji do wczytywania słów

string slowo;
while (plik >> slowo) {
    // sprawdzenie słowa
}

Aby sprawdzić czy słowo jest rosnące wykonaj następujące instrukcje:
1. Utwórz zmienną logiczną i ustaw ją na true
2. Iteruj od drugiej litery do ostatniej:
- jeżeli litera jest różna niż poprzednia litera+1 to ustaw zmienną logiczną na false i przerwij iterację
3. Jeżeli zmienna logiczna cały czas ma wartość true to wyświetl napis

komentarz 25 kwietnia 2021 przez Latarnik Użytkownik (650 p.)
Dziękuje za pomoc i odpowiedź jednak trochę nie rozumiem sposoby .

Czy byłaby możliwość wyjaśnienia  tego na moim kodzie lub na jakimś innym ?
komentarz 25 kwietnia 2021 przez tkz Nałogowiec (42,000 p.)
edycja 26 kwietnia 2021 przez tkz
int main()
{
    std::ifstream file("data.csv");
    std::string line;
    while (file>>line)
    {
        for (std::size_t i{1}; i < line.size(); ++i)
        {
            if (line.at(i - 1) > line.at(i))
            {
                continue;
            }
        }
        //wypisz, przepisz, cokolwiek 
    }
}

Fakt, w moim przykładzie kompletnie bezsensu użyłem getline. Z deczko poprawione i uproszczone. 

0 głosów
odpowiedź 26 kwietnia 2021 przez Great Stary wyjadacz (12,360 p.)
#include <iostream>
#include <algorithm>
#include <fstream>

int main() {
    std::ifstream file("NAPIS.txt");
    for (std::string word; file >> word;) {
        if (std::is_sorted(word.begin(), word.end())) {
            std::cout << word << "\n";
        }
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 377 wizyt
pytanie zadane 10 października 2016 w HTML i CSS przez Vromix Początkujący (410 p.)
0 głosów
3 odpowiedzi 1,169 wizyt
pytanie zadane 25 grudnia 2018 w Java przez ShockOfficial Początkujący (390 p.)
0 głosów
1 odpowiedź 438 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...