» »

[C++] Štetje sičnikov in brisanje ločil

[C++] Štetje sičnikov in brisanje ločil

minghags ::

Lep pozdrav!

Zanima me, če mi lahko kdo pomaga pri tej nalogi. In sicer, rad bi prebral koliko sičnikov (c,s,z) je v polju in pobrisal ločila iz polja. Za zdaj sem prišel do sem...

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int numChars(string besedilo[])
{
    int znaki=0;
    int vrstica=0;
    for(int a=0;a<10;a++)
    {
        vrstica=besedilo[a].length();
        znaki=znaki+vrstica;
    }
    return znaki;
}
int numWords(string besedilo[])
{
    int besede=0;
    string vrsta;
    for(int a=0;a<1;a++)
    {
        vrsta=besedilo[a];
        for(int b=0;b<besedilo[a].length();b++)
        {
            if(vrsta[b]==' ' || vrsta[b]=='\n')
            {
                besede++;
            }
        }
        besede++;
    }
    return besede;
}

int reverseString(string a[])
{
    for (int i = 0; i < 1; i++)
    {
        string rstr = a[i];
        reverse(rstr.begin(), rstr.end());
        cout << rstr << endl;
    }
}

int countChar( char * str , char ch )
{
    int countChar = 0;
    
    for ( int i = 0; str[i] != '\0'; i++)
    {
        if ( str[i] == ch )
            countChar = countChar + 1;
    }
    
    return countChar;
}

int main()
{
    string vrstica[10];
    string ime;
    int meni;
    cout<<"Vnesi besedilo: ";
    cout<<endl<<"-----------------------"<<endl;
    for(int a=0;a<1;a++)
    {
        getline(cin,vrstica[a]);
    }
    
    cout<<"-----------------------"<<endl;
    do
    {
        cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
        cout<<"+    MENU                                       +"<<endl;
        cout<<"+ 1. Izpise stevilo vnesenih znakov             +"<<endl;
        cout<<"+ 2. Izpise stevilo vnesenih besed              +"<<endl;
        cout<<"+ 3. Obrne niz                                  +"<<endl;
        cout<<"+ 4. Prešteje število sičnikov                  +"<<endl;
        cout<<"+ 0. Izhod                                      +"<<endl;
        cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++"<<endl<<endl;
        cin>>meni;
        if(meni==1)
        {
            cout<<"Stevilo znakov: "<<numChars(vrstica)<<endl;
        }
        if(meni==2)
        {
            cout<<endl<<"Stevilo besed: "<<numWords(vrstica)<<endl;
        }
        if(meni==3)
        {            
            cout<<reverseString(vrstica);
        }
        if(meni==4)
        {
            cout << "s comes : " << countChar( vrstica , 's' ) << " times" << endl;
        }
    }
    while(meni!=0);
    return 0;
}


Hvala za pomoč.

klemen93 ::

namesto
cout << "s comes : " << countChar( vrstica , 's' ) << " times" << endl;


napiši
cout << "s, c, z comes : " << (countChar( vrstica , 's' ) + countChar( vrstica , 'c' ) + countChar( vrstica , 'z' )) << " times" << endl;


ali pa napiši novo funkcijo

int steviloSicnikov( char * str )
{
int countChar = 0;
     
    for ( int i = 0; str[i] != '\0'; i++)
    {
        if ( str[i] == 's' || str[i] == 'c' || str[i] == 'z' )
            countChar++;
    }
     
    return countChar;
}

minghags ::

Hvala, ampak problem je, da je v funkciji char, jaz pa uporabljam string... in mi vrže ven "No matching function to call to "steviloSicnikov"...

klemen93 ::

spremeni tip, ki ga sprejme kot argument

int steviloSicnikov( string str)

minghags ::

Hvala ti... Zaj pa samo še ena stvar, če je mogoče možnost da pomagaš, in sicer moram izbrisati ven vsa ločila:

void izbris_vejic(string str[])
{
    for(int a=0;a<10;a++)
    {
        for(int i = besedilo[a].find(",", 0); i != string::npos; i = besedilo[a].find(",", i))
        {
            besedilo[a].erase(i,1);
            i++;
        }
    }
}


To sem do zdaj naredil, kak bi to lahko implementiral?

Hvala še enkrat.

ERGY ::

str.erase(std::remove_if (str.begin(), str.end(), static_cast<int(*)(int)>(&ispunct)), str.end()); //pobrišemo ločila


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Niti - segmentation fault

Oddelek: Programiranje
211972 (819) galu
»

DIJKSTROV_ALGORITEM

Oddelek: Programiranje
142209 (1443) krneki0001
»

[C] Vsota števil v polju

Oddelek: Programiranje
51267 (1205) Cvenemir
»

[C++] Delo s *.txt datotekami

Oddelek: Programiranje
192011 (1487) Tr0n
»

[C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevil

Oddelek: Programiranje
222937 (2748) snow

Več podobnih tem