2016-03-27 8 views
0

Erste C-Programmierklasse und Beginn der Programmierung. Wir lernen gerade Arrays in C und das ist eine Lernaufgabe, um Arrays zu verstehen und ein Programm zu bekommen, das eine zufällige Folge von Großbuchstaben erzeugt, danach eine Benutzereingabe von bis zu 20 Großbuchstaben verlangt und dann diese Buchstaben ersetzt zuvor zufällige Zeichenfolge mit einem * generiert. Ich kann die zufällige Zeichenfolge generieren, aber ich habe Probleme zu verstehen, was die beste Möglichkeit ist, diese Zeichenfolge an die zweite Funktion zu übergeben, um die ausgewählten Werte zu ersetzen.C Programm zum Generieren von zufälligen Großbuchstaben und Ersetzen von Werten

Kurz Beispiel:

Zufalls string: AOIHGGDGIYGDYFDYIGDGPIGD

Buchstaben eingeben zu ersetzen (bis zu 20 Buchstaben): GD

New string: AOIH **** IY YF * YI ** * PI

Unten ist der Code, den ich bisher habe. Jeder Rat darüber, wie und welcher Teil des folgenden Codes geändert werden kann, um dies zu erreichen, wird sehr geschätzt!

Strom teilweise fehlerhafte Ausgabe Beispiele:

JOAUZKKMJVNDFABILLKAWNWEKUEJGHKRCBDUYYRG

Zeichen eingeben ersetzt werden: W

Modifizierte String nach dem Austausch ist: & Theta; i.


AKNZPUWCCKNOIQADOYXZIVCGFUWTKRQOGSWSPFFS

Geben Sie Zeichen ersetzt werden: FSQ

Modified String nach dem Austausch ist: & Theta; i.

Vielen Dank für Ihre Zeit und Anleitung.

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


void getRandomStr(); 
void strreplace(char s1[], char chr, char repl_chr); 

int main(int argc, const char argv[]) 
{ 


    char s1[41], s2, repl_chr; 
    getRandomStr(); 
    printf("%c\n"); 

    gets(s1); 
    printf("\nEnter character to be replaced: "); 
    s2 = getchar(); 
    fflush(stdin); 
    repl_chr = '*'; 
    printf("\nModified string after replacement is: "); 
    strreplace(getRandomStr, s2, repl_chr); 
    getch(); 
    return 0; 



    return 0; 
} 


void getRandomStr(){ 


    char s1[41]; 
    int i; 

    srand(time(NULL)); 

    for (i = 0; i < 40; i++){ 

     char c = rand() % 26 + 'A'; 

     s1[i] = c; 

    } 

    for (i = 0; i < 40; i++){ 

     putchar(s1[i]); 

    } 

} 

void strreplace(char s1[], char chr, char repl_chr) 
{ 
    int i = 0; 
    while (s1[i] != '\0') 
    { 
      if (s1[i] == chr) 
     { 
      s1[i] = repl_chr; 
     } 
     i++; 
    } 
    puts(s1); 
    return 0; 
} 
+2

getRandomStr nie nul endet s1 – xvan

+0

Die 's1' Array in' getRandomStr' ist nicht das gleiche 's1' Array, das in' main' erklärt wird. Wenn Sie den gleichen Namen in zwei verschiedenen Funktionen verwenden, werden zwei separate und nicht verwandte Variablen erstellt. – user3386109

Antwort

2

Wie andere in den beglückwünscht erwähnt haben, sind nur einige der Probleme im Code:

  • Sie null nicht die Zeichenfolge in getRandomStr terminate()
  • Sie nur ein Zeichen nehmen ab der Benutzer statt einer ganzen Reihe (wollen Sie mehrere Zeichen ändern, nicht nur eine)

ich habe Ihre Funktionen wie folgt geändert:

void getRandomStr(char* s1); 
void strreplace(char s1[], char chrs[], char repl_chr); 

int main(int argc, const char * argv[]) { 
    char s1[41]; 
    char s2[256], repl_chr; 

    getRandomStr(s1); 
    printf("%s\n", s1); 

    //gets(s1); 
    printf("\nEnter characters to be replaced: "); 
    fgets(s2, sizeof(s2), stdin); 
    repl_chr = '*'; 

    printf("\nModified string after replacement is: "); 
    strreplace(s1, s2, repl_chr); 
    //getch(); 
    return 0; 
} 


void getRandomStr(char* s1){ 
    int i; 
    srand(time(NULL)); 
    for (i = 0; i < 40; i++){ 
     char c = rand() % 26 + 'A'; 
     s1[i] = c; 
    } 
    s1[40] = '\0'; 
} 

void strreplace(char s1[], char chrs[], char repl_chr) 
{ 
    int i = 0; 
    while (chrs[i] != '\0') { 
     for (int j = 0; s1[j] != '\0'; j++){ 
      if (s1[j] == chrs[i]) 
      { 
       s1[j] = repl_chr; 
      } 
     } 
     i++; 
    } 
    puts(s1); 
} 
+1

Vielen Dank für Ihre Hilfe und Zeit !! Dies wird mir helfen, diese Arten von Funktionen/Code zu studieren. Ich werde es für die Überprüfung und das Lernen verwenden. : 0) – st4evr

0

Endgültige Prog für den Fall, dass es jemals so etwas braucht.

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

#define BUFF_SIZE 512 


void getRandomStr(char s1[]); 
void strreplace(char s1[], char chrs[], char repl_chr); 
void check(char s2[], char chrs[]); 
char cont(void); 

int main(int argc, const char argv[]) { 

    char s1[BUFF_SIZE]; 
    char s2[BUFF_SIZE], repl_chr; 
    char proceed = 0; 


    do { 

    getRandomStr(s1); 
    printf("Your random string is: %s\n", s1); 


    /* gets(s1) */ 
    printf("\nEnter only 20 characters to be replaced: "); 
    gets(s2, sizeof(s2), stdin); 
    repl_chr = '*'; 

     check(s1, s2); 


     printf("\nModified string after replacement is: "); 
     strreplace(s1, s2, repl_chr); 


    proceed = cont(); 

    } while (proceed == 'Y' || proceed == 'y'); 

} 


void getRandomStr(char s1[]) { 

    int i; 

    srand(time(NULL)); 
    for (i = 0; i < 40; i++) { 

     char c = rand() % 26 + 'A'; 
     s1[i] = c; 

    } 

    s1[40] = '\0'; 
} 

void strreplace(char s1[], char chrs[], char repl_chr) 
{ 
    int i = 0; 

    while (chrs[i] != '\0') { 

     for (int j = 0; s1[j] != '\0'; j++) { 

      if (s1[j] == chrs[i]) 
      { 

       s1[j] = repl_chr; 

      } 
     } 

     i++; 
    } 
    puts(s1); 
} 


char cont() 
{ 

    char proceed; 
    printf("\nWould you like to run the program again (y/n)? "); 
    scanf("%c%*c", &proceed); 
    return proceed; 
} 

void check(char s2[], char chrs[]) 
{ 
    int i = 0; 

    while (chrs[i] != '\0') { 

     for (int j = 0; s2[j] != '\0'; j++) { 

      if (!(chrs[i] >= 'A' && chrs[i] <= 'Z')) 
      { 

       printf("An invalid character was entered.\n"); 
       break; 
      } 
     } 

     i++; 
    } 
} 
Verwandte Themen