Δημοσιεύτηκε: 26 Αύγ 2011, 15:21
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;
}