Question 1 : Saisissez une chaîne de lettres minuscules (a~z) via le clavier.
Veuillez écrire un programme de filtrage de chaînes. Si plusieurs caractères identiques apparaissent dans la chaîne, les caractères qui n'apparaissent pas pour la première fois seront filtrés.
Par exemple, le résultat du filtre de la chaîne « abacacde » est « abcde ».
Nécessaire pour implémenter les fonctions :
Copiez le code comme suit :
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
[Entrée] pInputStr : chaîne d'entrée
lInputLen : longueur de la chaîne d'entrée
[Output] pOutputStr : chaîne de sortie, l'espace a été ouvert et il a la même longueur que la chaîne d'entrée ;
[Remarque] Il vous suffit de compléter l'algorithme de fonction, et aucune entrée et sortie IO n'est nécessaire au milieu.
Exemple
Entrée : « deefd » Sortie : « def »
Entrée : "afafafaf" Sortie : "af"
Entrée : "pppppppp" Sortie : "p"
La fonction principale a été masquée. Il s'agit d'une entrée de test réservée aux utilisateurs. Vous pouvez tester votre fonction d'implémentation ici et appeler printf pour imprimer la sortie.
Actuellement, vous pouvez utiliser d'autres méthodes pour tester, tant que vous vous assurez que le programme final peut être exécuté correctement, l'implémentation de la fonction peut être modifiée à volonté.
Mais ne changez pas le prototype de fonction. Assurez-vous que la compilation et le fonctionnement ne sont pas affectés.
Question 2 : Description des questions :
Saisissez une chaîne de lettres minuscules (a ~ z) via le clavier. Veuillez écrire un programme de compression de chaîne pour compresser les lettres répétées consécutives dans la chaîne et générer la chaîne compressée.
Règles de compression :
1. Compressez uniquement les caractères récurrents consécutifs. Par exemple, puisque la chaîne « abcbc » ne comporte aucun caractère répété consécutif, la chaîne compressée est toujours « abcbc ».
2. Le format du champ compressé est « nombre de répétitions de caractères + caractères ». Par exemple : la chaîne "xxxyyyyyyz" devient "3x6yz" après compression
Nécessaire pour implémenter les fonctions :
Copiez le code comme suit :
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
[Entrée] pInputStr : chaîne d'entrée
lInputLen : longueur de la chaîne d'entrée
[Output] pOutputStr : chaîne de sortie, l'espace a été ouvert et il a la même longueur que la chaîne d'entrée ;
[Remarque] Il vous suffit de compléter l'algorithme de fonction, et aucune entrée et sortie IO n'est nécessaire au milieu.
Exemple
Entrée : "cccddecc" Sortie : "3c2de2c"
Entrée : "adef" Sortie : "adef"
Entrée : « pppppppp » Sortie : « 8p »
Copiez le code comme suit :
Test de classe publique {
static void stringFilter( char InputStr[], long len, char OutputStr[]){
int[] a= nouveau int[26];
numéro int = 0 ;
int j=0;//OutputStr[] compte
pour(int i=0;i<len;i++){
num = InputStr[i]-'a';
if(a[num]==0){//N'apparaît pas
SortieStr[j]=InputStr[i];
j++;
un[num]=1 ;
}
}
}
static void stringZip( char InputStr[], long len, char OutputStr[]){
char temp=' ';
numéro int = 1 ;
point entier=0 ;
pour(int i=0;i<len;i++){
si(InputStr[i]==temp){
num++;
}autre{
si(num!=1){
OutputStr[point++]=(char)(num+'0');
num=1 ;
}
OutputStr[point++]=temp;
temp=InputStr[je];
}
}
}
public static void main (String[] arguments) {
// TODO Stub de méthode généré automatiquement
char [] test={'a','a','a','c','b','b','b','a','a','c','a', 'd', 'd', 'd', 'c', 'd', 'e'} ;
long len=test.longueur;
char [] res = nouveau char[(int) len];
stringFilter(test,len,res);
int j=res.length;
pour(int i=0;i<j;i++){
si(res[i]!='/0'){
System.out.print(res[i]);
}autre
casser;
}
char[] res2=nouveau char[(int) (2*len)];
stringZip(test,len,res2);
pour(int i=0;i<2*len;i++){
si(res2[i]!='/0'){
System.out.print(res2[i]);
}autre
casser;
}
}
}