A. Monatsabfrage (Array von Zeigern)
Themenbeschreibung
Es ist bekannt, dass die englischen Wörter jedes Monats wie folgt lauten. Es ist erforderlich, ein Array von Zeigern zu erstellen. Jeder Zeiger im Array zeigt auf eine englische Zeichenfolge eines Monats. Es ist erforderlich, das entsprechende englische Wort entsprechend auszugeben Geben Sie die Monatsnummer ein.
Januar Januar
Februar Februar
MärzMärz
April April
Mai Mai
Juni Juni
Juli
AugustAugust
September September
Oktober Oktober
NovemberNovember
Dezember Dezember
eingeben
Die Eingabe t in der ersten Zeile repräsentiert t Testinstanzen
Geben Sie dann pro Zeile die Zahl eines Monats ein
Geben Sie nacheinander t Zeilen ein
Ausgang
Jede Zeile gibt die Zeichenfolge des entsprechenden Monats aus. Wenn kein Wort dieses Monats vorhanden ist, wird ein Fehler ausgegeben
Eingabebeispiel 1
3
5
11
15
Ausgabebeispiel 1
Mai-
November-
Fehler
AC-Code
#include<bits/stdc++.h>
using namespace std;
int main() {
const char* month[12]{
"January","February","March","April","May","June","July","August","September","October","November","December" };
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
if (n > 0 && n <= 12)
cout << *(month + n - 1) << endl;
else
cout << "error" << endl;
}
return 0;
}
B. Digitales Urteil (der Zeiger ist ein Funktionsparameter)
Themenbeschreibung
Geben Sie eine Zeichenfolge ein, um festzustellen, ob es sich bei der Zeichenfolge um eine Zeichenfolge vollständiger Ganzzahlwerte handelt. Wenn Sie beispielsweise „1234“ eingeben, bedeutet dies die Ganzzahl 1234. Wenn Sie „12a3“ eingeben, bedeutet dies, dass es sich nur um eine Zeichenfolge und nicht um eine Ganzzahl handelt .
Es ist erforderlich, die Funktion isNumber zu schreiben, der Parameter ist ein Zeichenzeiger und der Rückgabewert ist ein Ganzzahltyp
Wenn die Zeichenfolge eine Ganzzahl darstellt, werten Sie die Ganzzahl aus und geben Sie sie zurück
Gibt -1 zurück, wenn die Zeichenfolge keine Ganzzahl darstellt
Die Hauptfunktion muss isNumber aufrufen, um die Zeichenfolge zu beurteilen, und darf keine ähnlichen Funktionen verwenden, die in C++ oder Drittanbietern enthalten sind
eingeben
Geben Sie t ein, um anzugeben, dass es t Testinstanzen gibt
Geben Sie pro Zeile eine Zeichenfolge ein
Geben Sie nacheinander t Zeilen ein
Ausgang
Geben Sie das Beurteilungsergebnis für jede Zeile aus
Eingabebeispiel 1
3
1234
567a
0890
Ausgabebeispiel 1
1234
-1
890
AC-Code
#include<bits/stdc++.h>
using namespace std;
bool isNumber(char* str) {
char* p = str;
while (*p) {
if (*p >= '0' && *p <= '9')
p++;
else
return false;
}
return true;
}
int main() {
int t;
cin >> t;
while (t--){
char num[100];
cin >> num;
if (isNumber(num))
cout << atoi(num) << endl;
else
cout << "-1" << endl;
}
return 0;
}
C. String-Vergleich (Zeiger und Zeichen)
Themenbeschreibung
Schreiben Sie eine Funktion, um zwei Zeichenfolgen zu vergleichen. Die Parameter sind zwei Zeichenzeiger (erfordert eine explizite Definition, z. B. char * S, char * T) und vergleichen die Größe der Zeichenfolgen S und T. Gibt 1 zurück, wenn S größer als T ist, -1, wenn S kleiner als T ist, und 0, wenn S gleich T ist.
Vergleichsregeln:
1. Vergleichen Sie die Zeichen an derselben Position der beiden Zeichenfolgen. Der Größenvergleich der Zeichen basiert auf dem ASCII-Wert
2. Wenn im Vergleich die Anzahl der Zeichen der Zeichenfolge S größer als die Anzahl der Zeichen der Zeichenfolge T ist und die Anzahl der Zeichen kleiner als T ist, gilt S als größer als T. Wenn gleich, ist S gleich T, und wenn kleiner als, ist S kleiner als T
Beispielsweise ist S aaccdd und T eebbbb. Jeder Positionsvergleich zeigt, dass die ersten beiden Buchstaben von S kleiner als T sind, die letzten vier Buchstaben jedoch größer als T, und schließlich wird S als größer als T angesehen
3. Wenn zwei Saiten unterschiedlich lang sind, ist die längere Saite größer
Geben Sie zwei Zeichenfolgen in die Hauptfunktion ein und rufen Sie diese Funktion auf, um eine Beurteilung vorzunehmen. In der Beurteilungsfunktion muss der Zeiger des Funktionsparameters zum Zeichenvergleich verwendet werden
eingeben
Geben Sie t ein, um anzugeben, dass es t Testinstanzen gibt
Geben Sie dann alle zwei Zeilen zwei Zeichenfolgen ein
Geben Sie t Instanzen nacheinander ein
Ausgang
Vergleichsergebnisse für eine Instanz pro Zeile ausgeben
Eingabebeispiel 1
3
aaccdd
eebbbb
AAbb++
aaEE*-
zznnkk
aaaaaaa
Ausgabebeispiel 1
1
0
-1
AC-Code
#include<bits/stdc++.h>
using namespace std;
int str_cmp(char* S, char* T) {
char* p = S, * q = T;
int cnt_s = 0, cnt_t = 0;
while (*p && *q) {
if (*p > *q)
cnt_s++;
else if (*p < *q)
cnt_t++;
p++;
q++;
}
if (*p && !*q)
return 1;
if (!*p && *q)
return -1;
if (cnt_s > cnt_t)
return 1;
if (cnt_s < cnt_t)
return -1;
return 0;
}
int main() {
int n;
cin >> n;
while (n--) {
char s1[100], s2[100];
cin >> s1 >> s2;
cout << str_cmp(s1, s2) << endl;
}
return 0;
}
D. Dynamisches Array (Zeiger und Array)
Themenbeschreibung
Zu Beginn ist die Länge des Arrays unbekannt, und je nach Anforderung werden verschiedene Zeigertypen erstellt. Mithilfe der Zeiger wird ein Array mit der entsprechenden Länge erstellt und anschließend werden unterschiedliche Anforderungen erfüllt
Wenn es erforderlich ist, ein ganzzahliges Array zu erstellen, berechnen Sie den Durchschnittswert aller Daten im Array
Wenn Sie aufgefordert werden, ein Zeichenarray zu erstellen, suchen Sie nach dem größten Buchstaben im Array
Wenn Sie aufgefordert werden, ein Array aus Gleitkommazahlen zu erstellen, ermitteln Sie den Mindestwert des Arrays
Es ist erforderlich, dass der gesamte Prozess des Programms keine Array-Indizes verwenden kann und Zeiger von der Array-Erstellung über die Eingabe bis hin zur Suche, dem Vergleich, der Berechnung und der Ausgabe verwendet werden müssen
Tipp: Verwenden Sie das neue Schlüsselwort
eingeben
Die Eingabe t in der ersten Zeile zeigt an, dass es t Testinstanzen gibt
Geben Sie in der zweiten Zeile zunächst einen Großbuchstaben ein, um den Array-Typ anzugeben, I, um den Ganzzahltyp anzugeben, C, um den Zeichentyp anzugeben, und F, um den Gleitkommazahlentyp anzugeben. Geben Sie dann n ein, um die Array-Länge anzugeben.
Geben Sie in der dritten Zeile n Daten ein
Geben Sie t Instanzen nacheinander ein
Ausgang
Jeder gibt das entsprechende Ergebnis entsprechend verschiedenen Array-Typen aus
Eingabebeispiel 1
3
C 5
ADEBC
I 6
22 55 77 33 88 55
F 4
3,1 1,9 6,5 4,8
Ausgabebeispiel 1
E
55
1.9
AC-Code
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
char ch;
int num;
cin >> ch >> num;
switch (ch) {
case 'C': {
char* s = new char[num];
for (int i = 0; i < num; i++)
cin >> *(s + i);
cout << *max_element(s, s + num) << endl;
delete[]s;
break; }
case 'I': {
int* arr = new int[num];
for (int i = 0; i < num; i++)
cin >> *(arr + i);
int sum = 0;
for (int i = 0; i < num; i++)
sum += *(arr + i);
cout << 1.0 * sum / num << endl;
delete[]arr;
break; }
case 'F': {
double* arr_f = new double[num];
for (int i = 0; i < num; i++)
cin >> *(arr_f + i);
cout << *min_element(arr_f, arr_f + num) << endl;
delete[]arr_f; }
default:
break;
}
}
return 0;
}
E. Drei Strings in einem (Zeiger und Zeichenarray)
Themenbeschreibung
Geben Sie drei Zeichenfolgen ein, lesen Sie die Teilzeichenfolgen jeder Zeichenfolge über den Zeiger (die Teilzeichenfolge bezieht sich auf einen kleinen kontinuierlichen Teil der Zeichenfolge) und führen Sie sie zu einer neuen Zeichenfolge zusammen
Erfordern:
-
Für die Erstellung und Eingabe der drei Zeichenfolgen können Arrays verwendet werden oder nicht
-
Berechnen Sie nach der Eingabe die Länge der neuen Zeichenfolge basierend auf der Länge der Teilzeichenfolge der drei Zeichenfolgen
-
Verwenden Sie die dynamische Array-Methode, um eine neue Zeichenfolge zu erstellen, und verwenden Sie Zeiger, um verschiedene Teile der drei Zeichenfolgen zu lesen und sie in die neue Zeichenfolge zu kopieren. Dies erfordert, dass der gesamte Prozess keine Array-Indizes verwenden kann
-
Gibt einen neuen String mithilfe eines Zeigers aus
eingeben
Die Eingabe t in der ersten Zeile zeigt an, dass es t Testinstanzen gibt
Geben Sie drei Zeichenfolgen in drei aufeinanderfolgenden Zeilen ein. Jede Zeichenfolge enthält 10 Zeichen
Geben Sie für drei aufeinanderfolgende Zeilen die Zahlen a und b in jede Zeile ein und geben Sie die Start- und Endpositionen jedes Teilstrings an. Beachten Sie, dass die Position der Zeichenfolge im allgemeinen Sinne aus 1 berechnet wird, was sich von der Array-Position in der Programmierung unterscheidet. Beispielsweise ist die Zeichenfolge abcdefg die Startposition 3, die Endposition 5 und die Teilzeichenfolge lautet cde
Geben Sie t Instanzen nacheinander ein
Ausgang
Geben Sie die neue zusammengeführte Zeichenfolge in jeder Zeile aus
Eingabebeispiel 1
2
abcdefghij
ABCDEFGHIJ
aabbccddee
3 5
2 6
8 10
AABBCCDDEE
ffgghhiijj
FFGGHHIIJJ
1 4
5 8
2 7
Ausgabebeispiel 1
cdeBCDEFdee
AABBhhiiFGGHHI
AC-Code
#include<bits/stdc++.h>
using namespace std;
class Solution {
int a1, b1, a2, b2, a3, b3;
char s1[100], s2[100], s3[100];
char* new_string;
public:
Solution() {
cin >> s1 >> s2 >> s3 >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
}
~Solution() {
delete[]new_string;
}
void cat() {
new_string = new char[b1 - a1 + b2 - a2 + b3 - a3 + 4];
char* q = new_string;
for (char* p = s1 + a1 - 1; p <= s1 + b1 - 1; p++)
*(q++) = *p;
for (char* p = s2 + a2 - 1; p <= s2 + b2 - 1; p++)
*(q++) = *p;
for (char* p = s3 + a3 - 1; p <= s3 + b3 - 1; p++)
*(q++) = *p;
*q = '\0';
}
char* get_new_string() {
return new_string;
}
};
int main() {
int n;
cin >> n;
while (n--) {
Solution s;
s.cat();
cout << s.get_new_string() << endl;
}
return 0;
}
F. Funktionsaufruf (Funktionszeiger)
Themenbeschreibung
Definieren und implementieren Sie drei Funktionen:
Die erste Funktion ist eine Ganzzahlfunktion, der Rückgabetyp ist eine Ganzzahl, der Parameter ist eine Ganzzahlvariable und die Operation besteht darin, den Quadratwert der Variablen zu ermitteln
Die zweite Funktion ist eine Gleitkommafunktion, der Rückgabetyp ist eine Gleitkommazahl, der Parameter ist eine Gleitkommazahlvariable und die Operation besteht darin, den Quadratwurzelwert der Variablen zu ermitteln. Um die Quadratwurzel zu finden, können Sie die Funktion sqrt (Gleitkommaparameter) verwenden, die die Quadratwurzel des Parameters zurückgibt, und in VC ist die Header-Datei cmath erforderlich.
Die dritte Funktion ist eine Zeichenfolgenfunktion ohne Rückgabewert. Der Parameter ist ein Zeichenfolgenzeiger und die Operation besteht darin, alle Kleinbuchstaben in der Zeichenfolge in Großbuchstaben umzuwandeln.
Anforderung: Definieren Sie drei Funktionszeiger, die jeweils auf diese drei Funktionen zeigen, und verwenden Sie dann die Funktionszeiger, um diese drei Funktionen entsprechend dem Aufruftyp aufzurufen. Diese drei Funktionen können nicht direkt aufgerufen werden.
Wenn der Typ I ist, wird die Ganzzahlfunktion über den Zeiger aufgerufen. Wenn der Typ F ist, wird die Gleitkommafunktion über den Zeiger aufgerufen. Wenn der Typ S ist, wird die String-Funktion über den Zeiger aufgerufen
eingeben
Geben Sie in der ersten Zeile ein t ein, um anzugeben, dass es t Testinstanzen gibt
Geben Sie zunächst in jeder Zeile einen Großbuchstaben ein, um die Art des Anrufs anzugeben, und geben Sie dann die entsprechenden Parameter ein
Geben Sie nacheinander t Zeilen ein
Ausgang
Jede Zeile gibt das Ergebnis des Funktionsaufrufs aus
Eingabebeispiel 1
5
S Shenzhen
I 25
F 6,25
I 31
S China
Ausgabebeispiel 1
SHENZHEN
625
2,5
961
CHINA
AC-Code
#include<bits/stdc++.h>
using namespace std;
int Square(int n) {
return n * n;
}
double Sqrt(double s) {
return sqrt(s);
}
void ToUpper(char* str) {
char* p = str;
while (*p) {
*p = toupper(*p);
p++;
}
}
int main() {
int t;
cin >> t;
while (t--) {
char ch;
cin >> ch;
char* p();
int(*p1)(int) = Square;
double(*p2)(double) = Sqrt;
void(*p3)(char* s) = ToUpper;
switch (ch) {
case 'S':
char s[100];
cin >> s;
p3(s);
cout << s << endl;
break;
case 'I':
int n;
cin >> n;
cout << p1(n) << endl;
break;
case 'F':
double d;
cin >> d;
cout << p2(d) << endl;
default:
break;
}
}
return 0;
}