Cod sursa(job #1019694)

Utilizator PsychoAlexAlexandru Buicescu PsychoAlex Data 31 octombrie 2013 19:51:48
Problema Principiul includerii si excluderii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.21 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <cstring>
#include <vector>

std::ifstream fin("nc.in");
std::ofstream fout("nc.out");

int nrCuv, nrFraze;

std::vector<int> lungimi;

int check(char s[])
{
    std::string cuv = "";
    for(int i = 0; i < strlen(s); i++)
    {
        if(s[i] == '?' || s[i] == '!')
        {
            if(cuv != "")
            {
//                std::cout<<cuv<<' ';
                nrCuv++;
            }
            lungimi.push_back(nrCuv);
            nrCuv = 0;
            nrFraze++;
//            std::cout<<"cuv1: "<<"'"<<cuv<<"'"<<'\n';
            cuv = "";
            continue;
        }

        if(i < strlen(s) - 2 && s[i] == '.' && s[i+1] == '.' && s[i+2] == '.')
        {
            if(cuv != "")
            {
                nrCuv++;
            }
            i += 2;
            lungimi.push_back(nrCuv);
            nrCuv = 0;
            nrFraze++;
//            std::cout<<"cuv2: "<<"'"<<cuv<<"'"<<'\n';
            cuv = "";
            continue;
        }

        if(s[i] == '.')
        {
            if(cuv != "")
            {
                nrCuv++;
            }
            lungimi.push_back(nrCuv);
            nrCuv = 0;
            nrFraze++;
//            std::cout<<"cuv3: "<<"'"<<cuv<<"'"<<'\n';
            cuv = "";
            continue;
        }
        if(s[i] == ' ' || s[i] == ',')//&& s[i-1] != ',' && s[i-1] != ' ')
        {
            if(cuv != "")
            {
                nrCuv++;
            }
//            std::cout<<"cuv4: "<<"'"<<cuv<<"'"<<'\n';
            cuv = "";
            continue;
        }
//        if( i > 0 && (s[i] == ' ' || s[i] == ',') && ((s[i-1] >= 'a' && s[i-1] <= 'z') || (s[i-1] >= 'A' && s[i-1] <= 'Z')))
//        {
//            continue;
//        }
        if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9'))
        {
            cuv += s[i];
        }
//        std::cout<<cuv<<'\n';
    }
}

void citire()
{
    char s[4001];
    while(fin.getline(s, 4001))
    {
        nrCuv += check(s);
    }
    fout<<nrFraze<<'\n';
    for(int i = 0; i < lungimi.size(); i++)
    {
        fout<<lungimi[i]<<'\n';
    }
}

int main()
{
    citire();
    return 0;
}