Frage 1: Geben Sie über die Tastatur eine Reihe von Kleinbuchstaben (a~z) ein.
Bitte schreiben Sie ein String-Filterprogramm. Wenn mehrere identische Zeichen in der Zeichenfolge vorkommen, werden die Zeichen herausgefiltert, die nicht zum ersten Mal erscheinen.
Das Filterergebnis der Zeichenfolge „abacacde“ ist beispielsweise „abcde“.
Erforderlich zur Implementierung von Funktionen:
Kopieren Sie den Codecode wie folgt:
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
[Eingabe] pInputStr: Eingabezeichenfolge
lInputLen: Länge der Eingabezeichenfolge
[Ausgabe] pOutputStr: Ausgabezeichenfolge, das Leerzeichen wurde geöffnet und hat die gleiche Länge wie die Eingabezeichenfolge;
[Hinweis] Sie müssen nur den Funktionsalgorithmus vervollständigen und in der Mitte sind keine E/A-Eingaben und -Ausgaben erforderlich.
Beispiel
Eingabe: „deefd“ Ausgabe: „def“
Eingabe: „afafafaf“ Ausgabe: „af“
Eingabe: „pppppppp“ Ausgabe: „p“
Die Hauptfunktion wurde ausgeblendet. Dies ist ein für Benutzer reservierter Testeingang. Sie können hier Ihre Implementierungsfunktion testen und printf aufrufen, um die Ausgabe zu drucken.
Derzeit können Sie andere Methoden zum Testen verwenden. Solange Sie sicherstellen, dass das endgültige Programm korrekt ausgeführt werden kann, kann die Funktionsimplementierung nach Belieben geändert werden.
Aber ändern Sie den Funktionsprototyp nicht. Stellen Sie sicher, dass die Kompilierung und der Betrieb nicht beeinträchtigt werden.
Frage 2: Beschreibung der Frage:
Geben Sie über die Tastatur eine Reihe von Kleinbuchstaben (a~z) ein. Bitte schreiben Sie ein String-Komprimierungsprogramm, um die aufeinanderfolgenden wiederholten Buchstaben in der Zeichenfolge zu komprimieren und die komprimierte Zeichenfolge auszugeben.
Komprimierungsregeln:
1. Komprimieren Sie nur nacheinander wiederkehrende Zeichen. Da beispielsweise die Zeichenfolge „abcbc“ keine aufeinanderfolgenden wiederholten Zeichen enthält, lautet die komprimierte Zeichenfolge immer noch „abcbc“.
2. Das Format des komprimierten Feldes ist „Anzahl der Zeichenwiederholungen + Zeichen“. Beispiel: Die Zeichenfolge „xxxyyyyyyz“ wird nach der Komprimierung zu „3x6yz“.
Erforderlich zur Implementierung von Funktionen:
Kopieren Sie den Codecode wie folgt:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
[Eingabe] pInputStr: Eingabezeichenfolge
lInputLen: Länge der Eingabezeichenfolge
[Ausgabe] pOutputStr: Ausgabezeichenfolge, das Leerzeichen wurde geöffnet und hat die gleiche Länge wie die Eingabezeichenfolge;
[Hinweis] Sie müssen nur den Funktionsalgorithmus vervollständigen und in der Mitte sind keine E/A-Eingaben und -Ausgaben erforderlich.
Beispiel
Eingabe: „cccddecc“ Ausgabe: „3c2de2c“
Eingabe: „adef“ Ausgabe: „adef“
Eingabe: „pppppppp“ Ausgabe: „8p“
Kopieren Sie den Codecode wie folgt:
öffentlicher Klassentest {
static void stringFilter( char InputStr[], long len, char OutputStr[]){
int[] a= new int[26];
int num=0;
int j=0;//OutputStr[] count
for(int i=0;i<len;i++){
num = InputStr[i]-'a';
if(a[num]==0){//Wird nicht angezeigt
OutputStr[j]=InputStr[i];
j++;
a[num]=1;
}
}
}
static void stringZip( char InputStr[], long len, char OutputStr[]){
char temp='';
int num=1;
int point=0;
for(int i=0;i<len;i++){
if(InputStr[i]==temp){
num++;
}anders{
if(num!=1){
OutputStr[point++]=(char)(num+'0');
num=1;
}
OutputStr[point++]=temp;
temp=InputStr[i];
}
}
}
public static void main(String[] args) {
// TODO Automatisch generierter Methoden-Stub
char [] test={'a','a','a','c','b','b','b','a','a','c','a', 'd','d','d','c','d','e'};
long len=test.length;
char [] res = new char[(int) len];
stringFilter(test,len,res);
int j=res.length;
for(int i=0;i<j;i++){
if(res[i]!='/0'){
System.out.print(res[i]);
}anders
brechen;
}
char[] res2=new char[(int) (2*len)];
stringZip(test,len,res2);
for(int i=0;i<2*len;i++){
if(res2[i]!='/0'){
System.out.print(res2[i]);
}anders
brechen;
}
}
}