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

c++ & Strings Help


Xdanger

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

Δημοσ.

Έχω δύο μεταβλητες

 

char* var1;

char* var2;

 

και περνάω τους πρώτους 10 χαρακτήρες της var1 στην var2

 

1oς Τρόπος

~~~~~~~~~~

 

strncpy(var2,var1,10);

 

2oς Tρόπος

~~~~~~~~~~

 

var2 = var1;

var2[10] = '\0';

 

To πρόβλημά μου είναι ότι (και στους δύο τρόπους) όταν αλάζει η δέυτερη

μεταβλητή(var2) αυτόματα αλάζει και η πρώτη (var1). Μήπως ξέρετε κάποιον τρόπο να κρατήσω σταθερή την πρώτη μεταβλητή (var1) όταν αλλάζει τιμή η δεύτερη

 

Ευχαριστώ πολύ.

Δημοσ.

Με τον δεύτερο τρόπο εννοείται ότι αλλάζει και η πρώτη γιατί πλέον και οι δυο μεταβλητές δείχνουν στο ίδιο string. Τώρα για τον πρώτο τρόπο, εγώ το έτρεξα χωρίς πρόβλημα.

Δημοσ.

Πρέπει να ορίσεις στους δυο δείκτες (pointers) σου (*var1,*var2) διαφορετικά κομμάτια μνήμης για τα στοιχεία που περιέχουν. Μιας λοιπόν και δουλεύεις σε C++ δοκίμασε:

 

>

 var1 = new char[255]; // 255 => γενικά το μέγεθος του string που θες
 var2 = new char[255]; 

 strcpy(var1,"123456789ABCDEF");

 strncpy(var2,var1,10);

 printf(" Original Var1: %s\n",var1); printf(" STRNCPY  Var2: %s\n",var2);

 strcpy(var1,"-");

 printf(" Original Var1: %s\n",var1); printf(" STRNCPY  Var2: %s\n",var2);

 delete var1;
 delete var2;

 

Υ.Γ.

Βέβαια ελπίζω να κατάλαβα σωστά την ερώτηση σου..

  • 5 μήνες μετά...
Δημοσ.

Έχω ένα πρόβλημα στη c++ με τα strings και είπα να μην ανοίξω νέο θέμα.. Μπορεί καποιος να βοηθήσει?

 

Λοιπον: Έχω ενα αρχείο με χαρακτήρες και ψηφία. Πώς μπορώ να περάσω σε int μεταβλητή κάποιο από τα ψηφία του αρχείου?

 

Επίσης, έχοντας κάνει getline(fin, line) και έχοντας μια γραμμή ως string στη μεταβλητη line, μπορώ με κάποιο τρόπο ένα χαρακτήρα της που είναι ψηφίο να τον κάνω int?

 

Ευχαριστώ για το χρόνο σας..

Δημοσ.
έχοντας μια γραμμή ως string στη μεταβλητη line' date=' μπορώ με κάποιο τρόπο ένα χαρακτήρα της που είναι ψηφίο να τον κάνω int?

 

Ευχαριστώ για το χρόνο σας..[/quote']ι

Τα περισσότερα c περιβάλλοντα (χρόνια έχω να δω κάποιο να ξεφεύγει) εμπεριέχουν τη συνάρτηση isdigit© που επιστρέφει non-zero (true) αν το c είναι ψηφίο μεταξύ 0 και 9, διαφορετικά επιστρέφει 0 (false). (Το header της συνάρτησης στο ctype.h).

Από κεί και πέρα αν το c είναι ψηφίο, η ακέραια τιμή c είναι [ψηφίο + 48] ή αλλιώς [ψηφίο + '0'] αφού ο ASCII του '0' ισούται με 48.

Συνεπώς η αριθμητική τιμή val_c που ζητάς θα είναι c-'0'. (Το c φυσικά μπορείς να το απομονώσεις σε ένα for, είτε σαν lin (με αρχ. τιμή i=0), είτε σαν *p (όπου p, pointer σε χαρακτήρα με αρχική τιμή lin).

Αν σε μπέρδεψα, η ώρα φταίει, μη διστάσεις να επανέλθεις.

Δημοσ.

Φίλε μου μπήκα στο φόρουμ απόψε για να γράψω ότι τη βρήκα την άκρη, ψάχνοντας στον πίνακα ASCII!! Επίσης για να πω ότι η διατύπωσή μου δεν ήταν και η καλύτερη!

 

Ευχαριστώ πάρα πολύ πάντως για την απάντηση και τη βοήθεια! Να 'σαι καλά!!

 

Υ.Γ: Η λύση που είχα ανακαλύψει ήταν ακριβώς ίδια με τη δική σου: Πάρνω το χαρακτήρα και τον "κάνω" -48, και έτσι παίρνω το int του!!

 

Και πάλι ευχαριστώ!!

 

(Επανέρχομαι με νέες απορίες σε λίγο!!!)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...