- 70
- 2
- CPU
- intel core i5-2310m
- HDD
- 1TB Western digital 5400rpm
- RAM
- 8gb ddr3
- GPU
- amd ati 7310m
- Monitor
- samsung E2220
- OS
- Windows 7; ubuntu 14.04; Kali linux; debian 7
Scrivere un programma C++ che letti da input, nell’ordine, una stringa S, un intero N, ed un elenco di N stringhe (con N >=2) stampi “OK” se nell’elenco sono presenti due stringhe che concatenate danno N. Altrimenti, stampi la stringa che si ottiene concatenando la più grande dell’elenco con la più piccola secondo l’ordine alfabetico. Esempi: Se l’input fosse Domjudge 4 judge dono stella Dom il programma dovrebbe stampare OK. Se l’input fosse Domjudge 5 judge dono stella dom luce il programma dovrebbe stampare stelladom.
Codice:
/*
*
* Ordina male maiuscole e minuscole, PROVA-BC-esame-ab
* risulta PROVABC invece di esameab!!
*
*/
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
string s;
unsigned n;
cin>>s;
cin>>n;
string *parole=new string[n];
string *s1=new string [n];
string *s2=new string[n];
for(unsigned i=0; i<n; i++)
cin>>parole[i];
bool find=false;
for(unsigned i=0; i<n; i++)
{
unsigned j=1;
while(j<n && find!=true)
{
if(s.compare(parole[i]+parole[j])==0 || s.compare(parole[j]+parole[i])==0)
find=true;
j++;
}
}
if(find==true)
cout<<"OK";
else
{
unsigned massimo=parole[0].length();
unsigned minimo=parole[0].length();
for(unsigned i=0; i<n; i++)
{
if(parole[i].length()>massimo)
massimo=parole[i].length();
if(parole[i].length()<minimo)
minimo=parole[i].length();
}
int tmp=0, tmp2=0;
int c1=0, c2=0;
for(unsigned i=0; i<n; i++)
{
if(parole[i].length()==massimo)
{
s1[tmp]=parole[i];
tmp++;
c1++;
}
else if(parole[i].length()==minimo)
{
s2[tmp2]=parole[i];
tmp2++;
c2++;
}
}
sort(s1, s1+c1);
sort(s2, s2+c2);
delete[]parole;
delete[]s1;
delete[]s2;
return 0;
}
Il programma funziona nel primo caso (dove deve stampare "OK"), nel secondo caso gli esempi del testo funzionano bene, ma:
se ad esempio ho le parole "PROVA, esame, BC, ab", mi aspetto in stampa: "esame ab", invece mi stampa "PROVA BC"
se ad esempio ho le parole "PROVA, esame, BC, ab", mi aspetto in stampa: "esame ab", invece mi stampa "PROVA BC"
DOMANDA:
c'è un modo (o funzione stl) per ordinare le stringhe senza avere problemi con lettere maiuscole e minuscole?