RISOLTO Ordine parole di una stringa al contrario

Stato
Discussione chiusa ad ulteriori risposte.

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
Inverto prima tutta la stringa e dopo inverto parola per parola

Per esempio se S vale "Ciao Bro"
Viene invertita e diventa "orB oaiC"
In seguito viene invertita ogni parola e diventa "Bro Ciao"


Scusa ma non capisco, il problema chiede di invertire l’ordine delle parole, mentre tu inverti poi anche i caratteri di ogni parola.
Mi sta sfuggendo qualcosa?
 

Andretti60

Utente Èlite
6,440
5,091
Ho capito quello che fai, ma il testo del problema è scrivere una “funzione che dato un array di char S inverta l'ordine delle parole”.
Per me significa che la stringa “uno due tre” diventa “tre due uno”
 

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
Esattamente.
Infatti "Ciao Bro" diventa "Bro Ciao" come nell'esempio
Ho capito quello che fai, ma il testo del problema è scrivere una “funzione che dato un array di char S inverta l'ordine delle parole”.
Per me significa che la stringa “uno due tre” diventa “tre due uno”
 

Andretti60

Utente Èlite
6,440
5,091
Quindi perché inverti due volte? Che motivo c’è?
Crei una nuova stringa, vuota.
Trovi l’ultima parola nella stringa originale , la appendi nella nuova stringa e la cancelli dalla vecchia, ripeti finché la stringa originale è vuota, lo puoi fare perfino ricorsivamente.
 
  • Mi piace
Reazioni: Alessandro001

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
Sisi, l'idea generale era di farlo con due array di char perchè lo richiedeva il problema.
Per semplificare giro prima tutta la stringa e dopo giro i singoli caratteri.
In realtà si potrebbe fare con un solo ciclo for che non manipola la stringa ma la stampa soltanto, però volevo farlo io così.
Per quanto riguarda la ricorsione non sono molto ferrato quindi vorrei prima studiarla e poi iniziare con la dp.

Quindi perché inverti due volte? Che motivo c’è?
Crei una nuova stringa, vuota.
Trovi l’ultima parola nella stringa originale , la appendi nella nuova stringa e la cancelli dalla vecchia, ripeti finché la stringa originale è vuota, lo puoi fare perfino ricorsivamente.
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
non avevo altro da fare e l'ho fatta per passare il tempo lol
Se sei curioso di vedere questa è una possibile versione recursiva
C++:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;

void RecursivePrint(string S)
{
    if (S.empty()) { return; }//END RECURSION CONDITION

    auto first = S.end();
    auto last = S.end() - 1;

    while (last != S.begin() && !isspace(*last)) { last--; }

    if (isspace(*last))
        cout << string(last + 1, first) << " ";//move space to the right
    else
        cout << string(last, first);//no space to move (last == begin())

    RecursivePrint(string(S.begin(), last));
}


int main()
{
    string S = "always pass on what you have learned";
    RecursivePrint(S);
}
 
Ultima modifica:
  • Mi piace
Reazioni: Alessandro001

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
non avevo altro da fare e l'ho fatta per passare il tempo lol
Se sei curioso di vedere questa è una possibile versione recursiva
C++:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;

void RecursivePrint(string S)
{
    if (S.empty()) { return; }//END RECURSION CONDITION

    auto first = S.end();
    auto last = S.end() - 1;

    while (last != S.begin() && !isspace(*last)) { last--; }

    if (isspace(*last))
        cout << string(last + 1, first) << " ";//move space to the right
    else
        cout << string(last, first);//no space to move (last == begin())

    RecursivePrint(string(S.begin(), last));
}


int main()
{
    string S = "always pass on what you have learned";
    RecursivePrint(S);
}

Grazie mille dell'aiuto e della disponibilità!!
Comunque sottoponendo al sistema di auto correzione mi da questo errore per un task --> "Execution killed with signal 9 (could be triggered by violating memory limits)"
Purtroppo non mi è dato sapere quale task!
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
Sono perplesso, io l'ho compilato in Visual Studio con flag /W4 e /WX e non ha trovato nessuno problema...
Qualcuno ha idea del motivo?

Magari perchè manca "return 0;" in main()? Penso che il compiler usato da visual studio lo inserisca in automatico
Non è che stai usando tools datati?
Post unito automaticamente:

a questo link https://forum.olinfo.it/t/ois-threshold-execution-killed-with-signal-9/4941 qualcuno dice "“Signal 9” significa che stai usando troppa memoria. "
Non so con che programma/compiler...
 
Ultima modifica:

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
Il compiler è un CMS automatico. Dopo provo con il return 0 ma non penso sia quello il problema
Sono perplesso, io l'ho compilato in Visual Studio con flag /W4 e /WX e non ha trovato nessuno problema...
Qualcuno ha idea del motivo?

Magari perchè manca "return 0;" in main()? Penso che il compiler usato da visual studio lo inserisca in automatico
Non è che stai usando tools datati?
Post unito automaticamente:

a questo link https://forum.olinfo.it/t/ois-threshold-execution-killed-with-signal-9/4941 qualcuno dice "“Signal 9” significa che stai usando troppa memoria. "
Non so con che programma/compiler...

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
suggerisco di passare a tools migliori ;)
Quello che ho scritto è valido c++ e non c'è un valido motivo per cui tu non possa scrivere lo stesso codice
(comunque lo puoi provare su qualsiasi compiler c++ online)
 

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
Il cms che sto usando è quello usato per la correzione delle olimpiadi di informatica italiane.
Al massimo posso provare a postare il codice sul loro forum e vedere cosa mi dicono
suggerisco di passare a tools migliori ;)
Quello che ho scritto è valido c++ e non c'è un valido motivo per cui tu non possa scrivere lo stesso codice
(comunque lo puoi provare su qualsiasi compiler c++ online)

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
bhe leggendo in quel forum è chiaro che questo signal 9 significa che occupi troppa memoria, il che non stupisce perchè le funzioni recursive non ritornano fino a che non raggiungono il fondo della recursione e son note per poter causare stackoverflow se vanno avanti troppo al lungo, e credo generalmente evitate in favore di un loop, ma ciò non significa che tu non debba studiarne il funzionamento per via delle limitazioni di memoria arbitrarie imposte da quel CMS.
Ti consiglio di scaricare un tool che ti permetta di sperimentare liberamente (Visual Studio è quello che uso io), ripeto il codice è valido e non c'è un buon motivo per non poterlo eseguire per qualcuno che sta imparando a programmare.
 
  • Mi piace
Reazioni: Alessandro001

Alessandro001

Utente Attivo
166
7
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
HDD
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
GPU
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
PSU
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Net
https://www.speedtest.net/result/8773872068.png
OS
Windows 10
Ma certo, infatti studierò quel codice.
Vorrei solo capire come mai mi da quell'errore
bhe leggendo in quel forum è chiaro che questo signal 9 significa che occupi troppa memoria, il che non stupisce perchè le funzioni recursive non ritornano fino a che non raggiungono il fondo della recursione e son note per poter causare stackoverflow se vanno avanti troppo al lungo, e credo generalmente evitate in favore di un loop, ma ciò non significa che tu non debba studiarne il funzionamento per via delle limitazioni di memoria arbitrarie imposte da quel CMS.
Ti consiglio di scaricare un tool che ti permetta di sperimentare liberamente (Visual Studio è quello che uso io), ripeto il codice è valido e non c'è un buon motivo per non poterlo eseguire per qualcuno che sta imparando a programmare.

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 
  • Mi piace
Reazioni: Marcus Aseth

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Ti parla uno che ha partecipato alle olimpiadi nazionali.

Semplicemente è necessario passare ad una soluzione iterativa e/o con complessità minore.
 
  • Mi piace
Reazioni: Alessandro001
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili