Großbuchstaben überprüfen in C!

binder0101

Grünschnabel
Hallo, Ich hab grad ein Programm geschrieben dies eine Permutation und keine Permutation unterscheidet. Das Programm funktioniert supper jedoch muss ich nur mehr überprüfen ob die Zeichenkette groß geschrieben wurde, ich hab da einen Ansatz mit der Funktion "isupper" aus der Bibliothek <ctype.h> aber kann es nicht wirklich umsetzen könnt ihr mir vielleicht ein paar Tipps geben?

Beispiel:
a: ASDFGHJKLLJGDADGJGAL
b: AAASDDDFGGGGHJJJKLLL
b ist eine Permutation von a

Code:
Code:
//Includes
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
//Funktionen

void stringsort(char per1[], int laenge);
void stringsort2(char per2[], int laenge2);

//Hauptprogramm
int main(void){
//Variablendeklaration
int size1 = 0,size2 = 0;
long zahl = 0, zahl2 = 0;
char *eptr = NULL,nochmal='A';
char per1[61] = "";
char per2[61] = "";
int i = 0,j=0;

do{

do{

printf("a: ");
fgets(per1, sizeof(per1), stdin);
zahl = strtol(per1, &eptr, 10);
size1 = strlen(per1);

printf("b: ");
fgets(per2, sizeof(per2), stdin);
zahl2 = strtol(per2, &eptr, 10);
size2 = strlen(per2);

stringsort(per1, size1); //Sortieren des ersten Strings.
stringsort(per2, size2); //Sortieren des zweiten Strings.

} while (size1 != size2);

if (strcmp(per1, per2) == 0){ //Vergleich der beiden Zeichenketten
printf("Ja, ist eine Permutation!\n");
}
else{
printf("Nein, ist keine Permutation!\n");
}

printf("Wollen Sie das Programm erneut starten? (J/N)\n");
nochmal = getch();
} while (nochmal == 'j' || nochmal == 'J');
return EXIT_SUCCESS;
}


void stringsort(char per1[], int laenge){
int temp = 0, i = 0, j = 0; // Die Ablagerungsvariable "temp" (siehe weiter unten)

laenge = strlen(per1);
for (i = 0; i < laenge; i++){ // Lässt jedes Zeichen einmal die folgende Anweisung durchführen...
for (j = 0; j < laenge-1-i; j++){ // Jedes Zeichen wird mit jedem anderen Zeichen im String verglichen
if (per1[j] > per1[j + 1]){
temp = per1[j]; // Werte...
per1[j] = per1[j + 1]; // ...werden...
per1[j + 1] = temp; // ...getauscht.
}
}
}
}

void stringsort2(char per2[], int laenge2){
int temp = 0, i = 0, j = 0; // Die Ablagerungsvariable "temp" (siehe weiter unten)


laenge2 = strlen(per2);
for (i = 0; i < laenge2; i++){ // Lässt jedes Zeichen einmal die folgende Anweisung durchführen...
for (j = 0; j < laenge2 - 1 - i; j++){ // Jedes Zeichen wird mit jedem anderen Zeichen im String verglichen
if (per2[j] > per2[j + 1]){
temp = per2[j]; // Werte...
per2[j] = per2[j + 1]; // ...werden...
per2[j + 1] = temp; // ...getauscht.
}
}
}
}
 
Hallo binder0101,

ich habe ehrlich gesagt keine Lust deinen unformatierten Quelltext zu lesen.
Aber Großbuchstaben befinden sich im ASCII Zeichensatz zwischen 65 und 90. Du könntest also jeden char im String prüfen ob er einen Wert zwischen eben diesen Grenzen hat. Nichts anderes macht auch die isUpper-Funktion.

Grüße,
Jennesta
 
Für die Formatierung kann ich nichts dafür die hat der Browser so komisch zusammengewürfelt, jedoch schaff ich das irgendwie nicht, komm nicht auf den algorithmus. Könnte mir einer noch ein paar Tipps geben ?
 
Hallo,

für die Formatierung die entsprechenden Codetags verwenden: [cpp ] [/ cpp]

Wie Jennesta schon schrieb, kannst du jedes Zeichen in deinem String überprüfen ob es ein Großbuchstabe ist. Die Großbuchstaben befinden sich zwischen 65 und 90. Dies kannst Du in einer Schleife abfragen lassen ob dies der Fall ist.
 
C++:
for (i = 0; i < size1; i++){
				for (j = 0; j < size1 - 1 - i; j++){
					if (per1 >= 65 && per1 <= 90){
						printf("a: ");
						fgets(per1, sizeof(per1), stdin);
						zahl = strtol(per1, &eptr, 10);
						size1 = strlen(per1);
					}
so irgendwie ich versteh nicht wie ihr das meint....

Hier nochmal ganzer code:
C++:
/*
Name:
Author:
Description:
Last Change:
*/

//Includes
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
//Funktionen

void stringsort(char per1[], int laenge);
void stringsort2(char per2[], int laenge2);

//Hauptprogramm
int main(void){
	//Variablendeklaration
	int size1 = 0,size2 = 0;
	long zahl = 0, zahl2 = 0;
	char *eptr = NULL,nochmal='A';
	char per1[61] = "";
	char per2[61] = "";
	int i = 0,j=0;

	
	
	
		
	do{
		
		do{
			for (i = 0; i < size1; i++){
				for (j = 0; j < size1 - 1 - i; j++){
					if (per1 >= 65 && per1 <= 90){
						printf("a: ");
						fgets(per1, sizeof(per1), stdin);
						zahl = strtol(per1, &eptr, 10);
						size1 = strlen(per1);
					}
			printf("b: ");
			fgets(per2, sizeof(per2), stdin);
			zahl2 = strtol(per2, &eptr, 10);
			size2 = strlen(per2);

			stringsort(per1, size1); //Sortieren des ersten Strings.
			stringsort(per2, size2); //Sortieren des zweiten Strings.
			
		} while (size1 != size2);
		
		if (strcmp(per1, per2) == 0){            //Vergleich der beiden Zeichenketten 
			printf("Ja, ist eine Permutation!\n");
		}
		else{
			printf("Nein, ist keine Permutation!\n");
		}

		printf("Wollen Sie das Programm erneut starten? (J/N)\n");
		nochmal = getch();
	} while (nochmal == 'j' || nochmal == 'J');
	return EXIT_SUCCESS;
}


void stringsort(char per1[], int laenge){
	int temp = 0, i = 0, j = 0;             // Die Ablagerungsvariable "temp" (siehe weiter unten)

	laenge = strlen(per1);
	for (i = 0; i < laenge; i++){           // Lässt jedes Zeichen einmal die folgende Anweisung durchführen...
		for (j = 0; j < laenge-1-i; j++){        // Jedes Zeichen wird mit jedem anderen Zeichen im String verglichen
			if (per1[j] > per1[j + 1]){
				temp = per1[j];    //    Werte...
				per1[j] = per1[j + 1];  // ...werden...
				per1[j + 1] = temp;  // ...getauscht.
			}
		}
	}
	
	
}

void stringsort2(char per2[], int laenge2){
	int temp = 0, i = 0, j = 0;             // Die Ablagerungsvariable "temp" (siehe weiter unten)
	

	laenge2 = strlen(per2);
	for (i = 0; i < laenge2; i++){           // Lässt jedes Zeichen einmal die folgende Anweisung durchführen...
		for (j = 0; j < laenge2 - 1 - i; j++){        // Jedes Zeichen wird mit jedem anderen Zeichen im String verglichen
			if (per2[j] > per2[j + 1]){
				temp = per2[j];    //    Werte...
				per2[j] = per2[j + 1];  // ...werden...
				per2[j + 1] = temp;  // ...getauscht.
			}
		}
	}





}
 
Hier mal ein Beispiel:
C++:
int istGross = 0;
for(int i = 0; i < strlen(string); i++) {
    for(int j = 65; j <= 90; j++) {
        if(string[I] != j) //Überprüfe ob string[I] gleich einem Großbuchstaben ist
            istGross++; //Wenn nicht, dann istGross++
    }
}
 
Ok soweit hab ichs mal verstanden aber zu was benötige ich die 'istGross' Variable ?
Oder was bedeuted der Wert der die 'istGross' Variable beinhaltet?
 
istGross wird immer um 1 erhöht, wenn ein Buchstabe im String kein Großbuchstabe ist.
 
Zurück