Find_first_not_of odczyt

0

Cześć , zrobiłem programik, który z pliku do odczytu sprawdza dana linijke, czy jest w niej cos innego niz spacja lub cyfra i jesli tak, to pokazuje blad danej linijki w konkretnej pozycji , wszystko dziala, ale tylko dla liter np. jesli w 3 linijce jest" 0 2 3 445 a 23" to napisze blad w linijce 3 na pozycji 10
natomiast jesli w linijce 3 jest jakis inny znak niz litery np. "012 7823 54# 90" to program pisze, iz zapis jest poprawny, nie uwzglednia innych znaków od liter, czy można to jakoś zmienić ?

#include<iostream>
#include<string>
#include<math.h>
#include<fstream>
#include<cstdlib>

using namespace std;


int main()
{   size_t kontroluj=0;
    size_t t=-1;
    string slowo;
    string line;
    ifstream plik;
    plik.open("lulu.txt");

    while(!plik.eof())
    {   kontroluj ++;
        getline(plik,slowo);
        line=slowo;
        if((t=line.find_first_not_of(" 0123456789",t+1)) != string::npos)  // uwaga, czyta tez spacje
        {

            cout<<"Blad w linijce "<<kontroluj;
             cout<< " literka w pozycji "<<t<<"\n";
        }
        else
        {
            cout<<"Poprawny zapis w linijce "<<kontroluj<<"\n";
        }

    }
    plik.clear();
    plik.seekg(0);
}

1

Robisz jakiś inny błąd, bo ten kod powinien działać poprawnie.
https://wandbox.org/permlink/BliqjIBXk5T5uZRh

0

Dopisz tam np. na początku pętli while coś tego typu

        if(plik.peek() == EOF)
            break;

bo jeżeli tego nie ma, to dla 4 linijek tekstu w lulu.txt getline wczyta 5
777.png

0
au7h napisał(a):

hmm.. a u mnie bez tej linijki kodu dla 4 lini wyświetlą się 4 line

0
YooSy napisał(a):

Robisz jakiś inny błąd, bo ten kod powinien działać poprawnie.
https://wandbox.org/permlink/BliqjIBXk5T5uZRh

hmm.. nwm Odpalam program w code blocks, i źle wyświetla, na zmiane na literki w pliku tekstowym reaguje, natomiast na inne znaki *%$#! itp. nie reaguje

0

To są znaki inne niż zawarte w stringu poszukiwanych znaków, więc nie powinno ich zaliczać do cyfr, które w nim są.

0

Spróbuj użyć:

#include <iostream>
#include <string>
#include <math.h>
#include <fstream>
#include <algorithm>
#include <ctype.h>
#include <stdio.h>

using namespace std;

int main()
{
    ifstream file("file.txt");
    string line {};

    while( getline( file , line ) )
    {
        auto iter = find_if( line.begin() , line.end(), []( char sign ){ return !(isdigit(sign)||isspace(sign)); } );
        cout << "Processing line : " << line ;
        if( iter != line.end() ) cout << " : error find at position : " << distance( line.begin(), iter ) << endl;
        else cout << " : correct" << endl;
    }

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1