• 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

Mały hosting, OGROMNE możliwości
0 głosów
784 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,040 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 (155,140 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,040 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,660 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 1,023 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,976 wizyt
pytanie zadane 25 grudnia 2018 w Java przez ShockOfficial Początkujący (390 p.)
0 głosów
1 odpowiedź 596 wizyt

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...