Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 30 Αύγ 2011, 16:38

migf1 έγραψε:Μόλις τον αραίωσα κι εγώ :lol:

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

int s_compare( char s1[], char s2[] )
{
int i=0, len1, len2;

if ( !s1[0] || !s2[0] )
return 2;

for (len1=0; s1[ len1 ]; len1++)
;
for (len2=0; s2[ len2 ]; len2++)
;
if (len1 == len2)
{
for (i=0; s1[i] != s2[i] && s1[i]; i++)
;
if (s1[i+1] = '\0') {
return 0;
}
else {
if ( s1[i] < s2[i] )
return -1;
else if ( s1[i] > s2[i] )
return 1;
}
}
else
{
for (i=0; s1[i] != s2[i] && s1[i]; i++)
;
if ( s1[i+1] = '\0')
return 0;
else {
if ( s1[i] < s2[i] )
return -1;
else if( s1[i] > s2[i] )
return 1;
}
}
return 3;
}


Τώρα πάω να τον κοιτάξω (αλλά πολύ πράγμα ρε συ, δεν χρειάζονται πάνω από 5-6 γραμμές κώδικα :) ) ... με το 1ο σκαν είδα πως σε κάποια if αντί για == '\0' έχεις βάλει = '\0'

:oops:
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Αύγ 2011, 16:41

Star_Light έγραψε:Nαι το ειχαμε πει και στις λιστες αυτο. Δηλαδη η συναρτηση αυτη οριοθετει μια περιοχη η οποια δειχνει το μηκος της συμβολοσειρας.

'Οχι, η συνάρτηση επιστρέφει ένα δείκτη σε char. Από το σημείο εκείνο μέχρι το πρώτο μηδενικό byte που θα βρεθεί από εκεί και μετά στη μνήμη είναι ένα string.
έγραψε:Χειριζομαστε απευθειας σαν συμβολοσειρες .... οκ δηλαδη ειναι ενας δεικτης σε μια συμβολοσειρα ο *dst πχ?

Ε ναι, σε όλα τα strings (και τους πίνακες) τα ονόματά τους είναι δείκτες που δείχνουν στην αρχή τους ;)
Τελευταία επεξεργασία από migf1 και 30 Αύγ 2011, 16:41, έχει επεξεργασθεί 2 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 30 Αύγ 2011, 16:41

Τελικά αυτό ήταν το πρόβλημα, αλλά τώρα κατάλαβα πως έχει και αλγοριθμικό πρόβλημα :problem:
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Αύγ 2011, 16:47

Θα το γλιτώσω το κοίταγμα δηλαδή; :lol:

Βασικά να σας δώσω λίγη βοήθεια...

Βάλτε ένα loop που θα σταματάει μόλις βρεθεί ανόμοιο ζεύγος χαρακτήρων στα 2 strings ή όταν το s1 φτάσει στο τέλος του ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 30 Αύγ 2011, 16:53

migf1 έγραψε:Θα το γλιτώσω το κοίταγμα δηλαδή; :lol:

Βασικά να σας δώσω λίγη βοήθεια...

Βάλτε ένα loop που θα σταματάει μόλις βρεθεί ανόμοιο ζεύγος χαρακτήρων στα 2 strings ή όταν το s1 φτάσει στο τέλος του ;)

Αυτό δεν έχω κάνει;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Αύγ 2011, 16:56

Εχμ όχι, στον κώδικά σου εγώ βλέπω... εχμ... 4 loops :lol:
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 30 Αύγ 2011, 16:57

migf1 έγραψε:Εχμ όχι, στον κώδικά σου εγώ βλέπω... εχμ... 4 loops :lol:

Δλδ θα πρέπει να έχουμε μόνο ένα loop; Και αν το 2ο string είναι μικρότερο του πρώτου;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Αύγ 2011, 17:00

Τότε θα έχει βρεθεί ανόμοιο ζεύγος χαρακτήρων στο σημείο που τελειώνει το 2ο string (το '\0' του 2ου string με όποιον έχει στην αντίστοιχη θέση το 1ο string).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 30 Αύγ 2011, 17:06

migf1 έγραψε:Τότε θα έχει βρεθεί ανόμοιο ζεύγος χαρακτήρων στο σημείο που τελειώνει το 2ο string (το '\0' του 2ου string με όποιον έχει στην αντίστοιχη θέση το 1ο string).

Ωχ ναι! Χαζομάρα μου..... :D
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Αύγ 2011, 17:13

Δεν είναι χαζομάρα σου ρε συ! Είναι μεγάλο "σχολείο" η διαχείριση των strings στη C ... σε εξοικειώνει με πολλά και σημαντικά πράγματα, και κυρίως σε "τρίβει" σε προγραμματική σκέψη. Απλά δεν ξέρω αν είστε ακόμα έτοιμοι. Εννοώ μήπως πρέπει να το πάμε πιο σιγά...
π.χ. να σας δώσω τον κώδικα με δείκτες, να λύσουμε ότι απορίες και μετά να τον μετατρέψετε σε μετρητές (είναι κυριολεκτικά 4 γραμμές με δείκτες, άντε να είναι 5 με δείκτες)... ή θέλετε να το παλέψετε μόνοι σας;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι