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

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

Δημοσ.

πως μπορω να φτιαξω την παρακατω αρχικοποιηση του πινακα μου σε συναρτηση?

 

main{

printf("Give the message to be encoded:\n\n");
    gets(arr);
len=strlen(arr);
 
 
    for(i=0;i<strlen(arr);++i){
                               
        if(arr>='a' && arr<='z'){
            valArr = arr-'a'+1;
        }
        
        if(arr>='A' && arr<='Z'){
            valArr = arr-'A'+1;
        }

   

}

ουσιαστικα γεμιζω τον πινακα μου valArr με τα γραμματα του αλφαβητου.
ευχαριστω

Δημοσ.

Αν θές να γεμισεις τον πίνακα με τα γράμματα του αλφαβητου μπορεις να κάνεις το εξής :

 
int i=0;
 
for(; i<LEN; i++)
 arr[i] = 'A' + i; 
 

Το LEN ειναι ντιρεκτίβα με το μέγεθος του πίνακα αντι να παιξεις με magic numbers ορισε το εξαρχης εσυ και χρησιμοποιησε το μετά.

 
#include<stdio.h>
#define LEN 10
 
int main(void)
{
    int i=0;
    char arr[LEN];
 
    for(; i<LEN; i++)
    arr[i] = 'A' +i;
 
    for(i=0; i<LEN; i++)
    printf("%c" , arr[i]);
 
   return 0;
}

ABCDEFGHIJ

 

ή

 
#include<stdio.h>
#define LEN 10
 
int main(void)
{
    int i=0;
    char arr[LEN]= "ABCDEFJHI";
 
    for(i=0; i<LEN; i++)
    printf("%c" , arr[i]);
 
   return 0;
}

πως μπορω να φτιαξω την παρακατω αρχικοποιηση του πινακα μου σε συναρτηση?

 

main{

printf("Give the message to be encoded:\n\n");
    gets(arr);
len=strlen(arr);
 
 
    for(i=0;i<strlen(arr);++i){
                               
        if(arr>='a' && arr<='z'){
            valArr = arr-'a'+1;
        }
        
        if(arr>='A' && arr<='Z'){
            valArr = arr-'A'+1;
        }

   

}

ουσιαστικα γεμιζω τον πινακα μου valArr με τα γραμματα του αλφαβητου.
ευχαριστω

 

Kαλεις 2 φορές την strlen η δευτερη ειναι μεσα στο for ενω έχεις εκχωρησει ηδη την τιμή της μέσα στο len. Αντι για την gets καλυτερα να χρησιμοποιήσεις την fgets που βάζει εγγυημένα '\0' στο τέλος ενος string ακομα και αν ο χρήστης πληκτρολογησει παραπανω χαρακτήρες απο το μήκος του πίνακα. Αν ο χρηστης πληκτρολογησει λιγότερους απο το μήκος του πίνακα τοτε βάζει και το ENTER και τον '\0' μέσα στον πινακα. 

 

Οσο για τα κεφαλαία και τα μικρά γράμματα μην αγχώνεσαι μπορεις να χρησιμοποιήσεις την συνάρτηση toupper οπου οταν ο χρηστης δινει ένα μικρο αυτο μετατρέπεται σε κεφαλαίο χωρις να το αντιλαμβάνεται εσωτερικα απο το πρόγραμμα οποτε θα δουλεύει εντάξει. ;)

  • Like 1
Δημοσ.

Αν έχει μάθει δείκτες κάπως έτσι...

char *fill_array(char *array, int n){
   int i;

   // Cheks for null pointer or negative size
   if (!array || n < 0)
      return(NULL);

   for ( i = 0; i < n; i++ )
      array[i] = 'a' + i;

   return array;
}


// Και στην main την καλείς κάπως έτσι...
int main( void ) {
   ...
   fill_array(valArr, strlen(arr));
   ...
}

Τη συνάρτηση την έγραψα στο "πόδι" χωρίς compile αλλά αυτή είναι η λογική...

 

Edit:

Αν θέλεις να αντιγράφεις στον πίνακα valArr τον arr μέσα στη συνέρτηση τότε:

char *fill_array(char *to_array, char *from_array, int n){
   int i;

   // Cheks for null pointer or negative size
   if (!from_array || !to_array || n < 0)
      return(NULL);

   for ( i = 0; i < n; i++ )
      to_array[i] = from_array[i] - 'a' + i;

   return to_array;
}

// και καλείς από τη main...

fill_array(valArr, arr, strlen(arr))

(Τα if που είχες βάλει δεν τα έβαλα για συντομία...)

 

επίσης στην main καλό είναι να κάνεις κι έναν έλεγχο

if (fill_array(...) == NULL){
   // Print error...
}
  • Like 1

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

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

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

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

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

Σύνδεση

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

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