RISOLTO Ricercare due lettere in una Stringa

Stato
Discussione chiusa ad ulteriori risposte.

MrLion

Nuovo Utente
50
4
CPU
AMD Vishera FX-8320
Dissipatore
Arctic Freezer 13 pro co
Scheda Madre
Asrock 990FX Extreme 3
HDD
Segate Barracuda 1TB
RAM
Corsair 1600 Mhz 8 GB
GPU
AMD r9 280x Vapor x Tri x
PSU
Corsair VS650 W
Case
Coller Master HAF 922
Periferiche
Tastiera Drevo Calibur Switch RED/ Mouse Logitech g203
OS
W10/Ubuntu
Salve a tutti , ho un problema con un programma che chiede "Data una certa stringa di 100 caratteri da tastiera , verificare se nella stringa siano presenti consecutivamente le due lettere n e c".
Non riesco a capire come ricercare consecutivamente queste due lettere.
(Forse dovrei scandire la stringa con un For e salvare la poszione delle due lettere?)
Accetto consigli non voglio la soluzione!
Grazie;)
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Devi solo scandire la stringa e incrementare una variabile utilizzata come contatore. La posizione non serve, non è richiesta dal testo dell'esercizio; viene esplicitamente chiesto solo di tenere traccia del numero.

Inviato da ONEPLUS A5000 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

MrLion

Nuovo Utente
50
4
CPU
AMD Vishera FX-8320
Dissipatore
Arctic Freezer 13 pro co
Scheda Madre
Asrock 990FX Extreme 3
HDD
Segate Barracuda 1TB
RAM
Corsair 1600 Mhz 8 GB
GPU
AMD r9 280x Vapor x Tri x
PSU
Corsair VS650 W
Case
Coller Master HAF 922
Periferiche
Tastiera Drevo Calibur Switch RED/ Mouse Logitech g203
OS
W10/Ubuntu
umm Mentre scandisco la stringa questa variabile si incrementa quando incontra le lettere che devo cercare?
Cioe' non capisco l'ultilizzo di questa variabile.
 

MrLion

Nuovo Utente
50
4
CPU
AMD Vishera FX-8320
Dissipatore
Arctic Freezer 13 pro co
Scheda Madre
Asrock 990FX Extreme 3
HDD
Segate Barracuda 1TB
RAM
Corsair 1600 Mhz 8 GB
GPU
AMD r9 280x Vapor x Tri x
PSU
Corsair VS650 W
Case
Coller Master HAF 922
Periferiche
Tastiera Drevo Calibur Switch RED/ Mouse Logitech g203
OS
W10/Ubuntu

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Se incontri la sequenza nc incrementi il contatore
 

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Lo hai capito il concetto di stringa? Mi sa di no...
Il programma te lo faccio, ma comunque non è la cosa giusta :)
Adatta ovviamente il codice in base a come devi prendere questa stringa.

C:
#include <stdio.h>

int main()
{
    char prova[] = "abcnnc";
    int i = 0;
  
    while(i < 100){
        if(prova[i] == 'n' && i < 99 && prova[i + 1] == 'c'){
            printf("OK");
            return 0;
        }
        i++;
    }
  
    printf("No");

    return 0;
}
 
Ultima modifica:

MrLion

Nuovo Utente
50
4
CPU
AMD Vishera FX-8320
Dissipatore
Arctic Freezer 13 pro co
Scheda Madre
Asrock 990FX Extreme 3
HDD
Segate Barracuda 1TB
RAM
Corsair 1600 Mhz 8 GB
GPU
AMD r9 280x Vapor x Tri x
PSU
Corsair VS650 W
Case
Coller Master HAF 922
Periferiche
Tastiera Drevo Calibur Switch RED/ Mouse Logitech g203
OS
W10/Ubuntu
Grazie mille , non capivo cosa mettere nell'if , comunque si a questo punto vado a rivedere le stringhe.
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Lo hai capito il concetto di stringa? Mi sa di no...
Il programma te lo faccio, ma comunque non è la cosa giusta :)
Adatta ovviamente il codice in base a come devi prendere questa stringa.

C:
#include <stdio.h>

int main()
{
    char prova[] = "abcnnc";
    int i = 0;
  
    while(i < 100){
        if(prova[i] == 'n' && i < 100 && prova[i + 1] == 'c'){
            printf("OK");
            return 0;
        }
        i++;
    }
  
    printf("No");

    return 0;
}
Occhio che ti da errore di segmentazione :patpat:
 

MrLion

Nuovo Utente
50
4
CPU
AMD Vishera FX-8320
Dissipatore
Arctic Freezer 13 pro co
Scheda Madre
Asrock 990FX Extreme 3
HDD
Segate Barracuda 1TB
RAM
Corsair 1600 Mhz 8 GB
GPU
AMD r9 280x Vapor x Tri x
PSU
Corsair VS650 W
Case
Coller Master HAF 922
Periferiche
Tastiera Drevo Calibur Switch RED/ Mouse Logitech g203
OS
W10/Ubuntu
Sto prendendo spunto da quello ma non lo faccio uguale.
 
  • Mi piace
Reazioni: rodhellas

Andretti60

Utente Èlite
6,440
5,091
Non da errore, ho provato (tutti i casi).
...
Priva con una stringa piu' corta di 100 caratteri che NON contenga "nc" :)
L'errore e' che devi controllare che l'indice della stringa sia sempre minore della lunghezza della stringa stessa.
Post unito automaticamente:

... comunque si a questo punto vado a rivedere le stringhe.
Nel linguaggio C standard non esiste il tipo "stringa", le stringhe sono semplici vettori di tipo 'char' (non unicode) o 'short' (unicode).

L'esercizio sarebbe uguale a "dato un vettore di interi, scrivere un algoritmo che trovi se due consecutivi elementi siano due valori specificati (per esempio '12' e '23')". Stessa cosa.

Detto questo, tanto per la cronaca, la libreria standard C ha funzioni predefinite che lavorano su vettori di caratteri, una delle quali fa esattamente quello che cerchi, ma probabilmente l'insegnante non vuole che tu la usi.
 
Ultima modifica:

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Priva con una stringa piu' corta di 100 caratteri che NON contenga "nc" :)
L'errore e' che devi controllare che l'indice della stringa sia sempre minore della lunghezza della stringa stessa.
Ho provato e non da errore.
L'utente ha messo come parametro lunghezza 100. Quindi è pensato per stringhe lunghe 100
 

M1n021

Nuovo Utente
143
68
@Ibernato posso capire che probabilmente si tratta solo di un esempio, ma così com'è scritto quel codice è sbagliato, infatti nella situazione prospettata da @Andretti60 (ossia array con meno di 100 caratteri che non contenga il gruppo "nc") andresti a scomodare zone di memoria che non competono all'array. Inoltre considerando la condizione del while, quel && i < 100 risulta superfluo, ed in ogni caso per evitare di incorrere in un segfault la condizione dovrebbe essere modificata in i < 99.

Volevo inoltre sottolineare che le stringhe C-style non sono semplici array di char, ma sequenze di caratteri terminate dal carattere \0. Questo significa anche che un array di 100 caratteri può contenere una stringa di lunghezza pari massimo a 99.
 
  • Mi piace
Reazioni: BAT e Andretti60

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Intanto la regola del forum dice che non si deve dare il codice risolutivo, ma solo indicazioni su come costruire l'algoritmo.

@Ibernato , hai visto un problema banale e hai voluto fare il gradasso violando la regola: così ti sei procurato pure una figuraccia! La prossima volta fai più attenzione e limitati a spiegare il concetto, lì si vede la vera abilità di un programmatore, la codifica in un linguaggio è un aspetto secondario.. considerato poi, che ormai tutti prevedono delle funzioni dedicate a svolgere quanto richiesto!

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili