Δημοσιεύτηκε: 26 Αύγ 2011, 15:21
από migf1
migf1 έγραψε:
...
ΥΓ. Τον κώδικα του screenshot δεν έχω προλάβει να τον κοιτάξω ακόμα

Λοιπόν το πρόβλημα ήταν πως δεν αρχικοποιούσες τα strings vowel, other & consonant στην main(), με αποτέλεσμα να ξεκινάνε με τυχαία περιεχόμενα μέσα τους (τα αρχικοποίησα σε "", όπως και το inbuf που το άλλαξα σε s ). Αραίωσα πάλι τον κώδικά σου και του έβαλα και κάποια σχόλια (άλλαξα ελαφρώς και τα ονόματα μερικών μεταβλητών και σου άλλαξα την επικίνδυνη strcat με την ασφαλή strncat). Αλγοριθμικά δεν τον έψαξα με λεπτομέρεια, αλλά με πρώτη ματιά δείχνει σωστός :)

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// ------------------------------------------------------------------------------
int is_vowel( char c )
{
char *s = "aAEeIioOUuYy"; // ορισμός του s με όλα τα φωνήεντα

while ( *s ) // όσο το *s διαφέρει του '\0'
if ( c == *s++ ) // ... αν το c βρεθεί στο s
return 1; // ... ... επέστρεψε TRUE

return 0; // επέστρεψε FALSE

/*** DISABLED
int i;
char s[] = {'a','A','E','e','I','i','o','O','U','u','Y','y','\0'};

for (i=0; i < 12; i++)
if ( c == s[i] )
return 1;

return 0;
***/
}
// ------------------------------------------------------------------------------
int is_consonant( char c )
{
// ορισμός του s με όλα τα σύμφωνα
char *s = "bBcCdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXzZ";

while ( *s ) // όσο το *s διαφέρει του '\0'
if ( c == *s++ ) // ... αν το c βρεθεί στο s
return 1; // ... ... επέστρεψε TRUE

return 0; // επέστρεψε FALSE

/*** DISABLED
int i;
char s[] = {'b','B','c','C','d','D','f','F','g','G','h','H','j','J','k','K','l','L','m','M','n','N','p','P','q','Q','r','R','s','S','t','T','v','V','w','W','x','X','z','Z','\0'};

for (i=0; i < 40; i++)
if ( c == s[i] )
return 1;

return 0;
***/
}
// ------------------------------------------------------------------------------
int main( void )
{
int i, i2=0, i3=0, i4=0, slen;
char s[256] = "";
char vows[255] = "", cons[255] = "", othr[255] = "";

fgets(s, 256, stdin);
slen = strlen( s );
for (i=0; i < slen; i++)
{
if ( is_consonant( s[i] ) ) {
cons[ i2++ ] = s[ i ];
}
else if ( is_vowel( s[i] ) ) {
vows[ i3++ ] = s[ i ];
}
else {
if ( s[i] > 31 && s[i] <= 64 )
othr[ i4++ ] = s[ i ];
}
}

/*** DISABLED for (i=0; i < strlen( s ); i++)
s[i] = 0;
***/
s[0] = '\0'; // σβήσιμο των περιεχομένων του s

strncat(s, vows, 255);
strncat(s, othr, 255);
strncat(s, cons, 255);

/*** DISABLED
for (i=0; i < strlen( s ); i++)
printf("%c", s[i]);
putchar('\n');
***/
puts( s ); // τύπωμα του s στην οθόνη

return 0;
}