PDA

Visualizza la versione completa : [C] Contare lettere doppie in una stringa


ar146
24-06-2008, 09:16
Ragazzi,
nn riesco a risolvere il seguente problema: data una stringa dovevamo vedere quante lettere si ripetevano più di una volta e metterle in un'altra stringa tante volte quante si ripetevano, mentre in un'altra mettere le restanti lettere che nn si ripetevano più di una volta.
Esempio: Babbo
bbb (stringa 1) ao(stringa 2).
Come lo si realizza in c????

Caiodark
24-06-2008, 10:00
Comincia dal postare quello che hai scritto tu e poi ragioniamo...

XWolverineX
24-06-2008, 10:43
Potresti creare un array di interi in cui inserisci le occorrenze di tutti i caratteri che incontri man mano

mondobimbi
24-06-2008, 11:42
suggerimento
se


// se
char * str = "babbo";
/* allora
str[0] ritorna 'b'
str[1] ritorna 'a'
e così via
*/

ar146
24-06-2008, 11:49
char v[6];
char l[6];
register int i=0;
int j=0;
int k=0;



printf("Inserire stringa:");
gets(v);
puts(v);

//for(i=0; i<6; i++){
if(v[i]==v[i++]){
j=j+1;
}

l[6]=v[0];
printf("%s",l);

ma è sbagliato.... aiutatemi

LexLex
24-06-2008, 14:49
se non è necessario che le lettere compaiano nell'ordine in cui si trovano nella parola potresti fare come ha detto Wolverine, altrimenti ti devi ingegnare diversamente secondo me..

In realtà pensandoci un attimino ci sono tantissime soluzioni semplicissime, un pò meno semplici.. E' necessario capire anche che pretese hai nei tempi di esecuzione..

Un'altra cosa, all'inizio parli di lettere doppie, io intendo come LL FF AA,(anche vedendo come hai impostato tu il problema) poi invece con Babbo, le tre B le metti tutte insieme..

Vincenzo1968
24-06-2008, 15:17
Una possibile soluzione:



#include <stdio.h>
#include <ctype.h>

int main()
{
int k, x, y;
char c;
char a[256];
char str[55] = "Babbo";
char str1[55];
char str2[55];

for ( k = 0; k < 256; k++ )
a[k] = 0;

k = 0;
while ( 1 )
{
if ( str[k] == '\0' )
break;
c = tolower(str[k]);
a[c] += 1;
++k;
}

x = y = 0;
for ( k = 0; k < 256; k++ )
{
if ( a[k] > 1 )
{
str1[x++] = k;
}
else if ( a[k] == 1 )
{
str2[y++] = k;
}
}
str1[x] = '\0';
str2[y] = '\0';

printf("\n\nCaratteri multipli: %s\n", str1);
printf("\n\nCaratteri singoli: %s\n", str2);

return 0;
}


Una migliore soluzione, dal punto di vista della velocità di esecuzione, potrebbe essere quella di utilizzare un alberio binario di ricerca.

:)

ar146
24-06-2008, 15:32
è azzeccato, però mi potresti spiegare while(1) eil resto che c'è sotto ,perkè nn ci capisco
ma si da un esercizio a fondamenti d'informatica a ingegneria informatica?

LexLex
24-06-2008, 15:32
Per rimanere in linea con quello che ha scritto ar186

bbb (stringa 1) ao(stringa 2).

propongo questa modifica:


for ( k = 0; k < 256; k++ )
{
if ( a[k] > 1 )
{
while (a[k] > 0) {
str1[x++] = k;
a[k]--;
}
}
else if ( a[k] == 1 )
str2[y++] = k;
}


Ma rimaniamo sempre nell'ipotesi che la posizione iniziale delle lettere non abbia importanza, altrimenti bisogna pensare diversamente..

ar146
24-06-2008, 16:14
nn ci capisko niente :dhò: :dhò: :dhò:

Loading