Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.
/* ξερεται μηπως γιατι ο μεταγλωτιστης δε μου βγαζει το πληθος?? */
#include <stdio.h>
#include <string.h>
main()
{
char a[10];
int i,len,times;
printf("enter text :");
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
if(a='k')
(times++);
}
printf("toses %c",times);
system("pause");
return 0;
}

ωχ ειχα κανει λαθος στη printf και εβαλα %c αντι για %d αλλα και παλι δε μου ωβγαζει π.χ σωστα το ποσες φορες εμφανιστηκε 


επρεπε να βαλω ==


βγαζει και εναν παραπανω χαρακτηρα φταιει μαλλον οτι ειναι και μυδενικος /0 που τον μετραει ,,,,..............

Δημοσ.

Για δώσε μια αρχική τιμή στην times δηλαδή times = 0

 

Επίσης ο τελεστής για έλεγχο ισότητας είναι == το = είναι τελεστής ανάθεσης.

if(a[i] == 'k')

 (times++);
  • Like 1
Δημοσ.

επρεπε να την αρχικοποιησω δικιο ειχες αν και το κανα καπως διαφορετικα εγω ,, εγραψα στο τελος times=(times-1); 

και μου βγηκε σωστο 

thanks παντως ;)


αμα θελω να το κανω με pointres υπαρχει καποιος τροπος π.χ με την malloc ?? ισως? 

  • Moderators
Δημοσ.

Πρέπει να αρχικοποιείς τις μεταβλητές σου πριν τις χρησιμοποιήσεις. Το ότι έτυχε να δουλέψει αυτή τη φορά δε σημαίνει ότι θα δουλεύει πάντα. Επίσης, η strlen σου δίνει τον αριθμό των χαρακτήρων μέχρι το πρώτο /0, χωρίς να το μετράει.

  • Like 1
Δημοσ.

...

αμα θελω να το κανω με pointres υπαρχει καποιος τροπος π.χ με την malloc ?? ισως?

Για να μετρήσεις τη συχνότητα εμφάνισης του 'k' δεν χρειάζεσαι malloc()... malloc() (και αντίστοιχα free()) θα χρειαζόσουν αν ήθελες να δημιουργήσεις τη συμβολοσειρά στην heap memory (τώρα την έχεις δημιουργήσει στατικά στην stack memory).

 

Ένας τρόπος για να μετρήσεις συχνότητα με τη βοήθεια ενός δείκτη cp (ανεξάρτητα του πως έχεις δημιουργήσει τη συμβολοσειρά) είναι ο παρακάτω:

 

Κώδικας:

 

 

#include <stdio.h>
#include <stdlib.h>
int main( void )
{
	char s[BUFSIZ] = {'\0'};
	int  times = 0;
	char *cp = NULL;

	printf( "enter text:" );
	fflush( stdout );
	fgets( s, BUFSIZ, stdin );

	for (cp=s; '\0' != *cp; cp++) {
		if ( 'k' == *cp ) {
			times++;
		}
	}

	printf( "toses %d\n", times );

	system( "pause" );
	return 0;
}

 

Σημείωση: H gets() έχει καταργηθεί από τη γλώσσα.

Επίσης και το main() (βγάζει warning) θέλει: int main( void )

 

Ένας άλλος πιο δυσνόητος τρόπος (και εν πολλοίς άχρηστος εδώ) που χρησιμοποιεί την strchr() αντί να ελέγχει για '\0' είναι αυτός:

 

Κώδικας:

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
	char s[BUFSIZ] = {'\0'};
	int  times = 0;
	char *cp = NULL;

	printf( "enter text:" );
	fflush( stdout );
	fgets( s, BUFSIZ, stdin );

	cp = s;
	while ( NULL != (cp=strchr(cp,'k')) ) {
		times++;
		cp++;
	}

	printf( "toses %d\n", times );

	system( "pause" );
	return 0;
}

 

Αν θέλεις την συμβολοσειρά να τη δημιουργήσεις στην heap memory, ο πρώτος κώδικας μπορεί να αλλάξει σε κάτι σαν κι αυτόν:

 

Κώδικας:

 

 

#include <stdio.h>
#include <stdlib.h>
int main( void )
{
	int  times = 0;
	char *cp = NULL;
	char *s = malloc( BUFSIZ );

	if ( NULL == s ) {
		fputs( "*** error: possibly out of memory, bye...", stderr );
		return 1;
	}

	printf( "enter text: " );
	fflush( stdout );
	fgets( s, BUFSIZ, stdin );

	for (cp=s; '\0' != *cp; cp++) {
		if ( 'k' == *cp ) {
			times++;
		}
	}

	printf( "toses %d\n", times );
	free( s );

	system( "pause" );
	return 0;
}

 

Αν δεν έχετε κάνει ακόμα δείκτες, νομίζω είναι καλύτερη ιδέα να περιμένεις πρώτα να κάνετε.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...