Captain_Obvious
Neu angemeldet
Hi, nachdem ich die letzten Monate hier im wesentlichen nur mitgelesen hab Poste ich mal ein kleines Problem welches mich die letzten 2 Stunden beschäftigt hält.
Folgendes Programm hab ich für eine Übung zusammengebastelt: http://pastebin.com/dz2gMR7G
[src=c]#include <stdio.h>
int isPalindrom(char *text);
char toLower(char *text);
char removeNonLetters(char *text);
int main(int){
char teststring[31];
char *testvalue[] = { "Ha/n/nah", "La-ger-regal", "O%t/to", "(Reit-)tier", "Reliefpfeiler", "Ren--tner", "R!o!t)or", "st--ets", "nein", "Hall67o", "Lastwa$gen" };
char *text;
int x;
text = teststring;
int choice = -1;
do{
printf("---Paldindrom---\nOptionen:\n");
printf("0 = Eigenen String eingeben\n");
printf("1 = Teststring durchkauen und ausspucken\n");
printf("2 = Programm beenden\n");
scanf_s("%d", &choice);
if (choice == 0)
{
printf("Bitte Testwort eingeben: ");
gets_s(teststring,30);
printf("%s\n", *text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
removeNonLetters(text);
printf("Nach RemoveNonLetters %s", *text);
printf("%s\n", *text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
toLower(text);
printf("Nach toLower %s", *text);
printf("%s\n", *text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
}
if (choice == 1)
{
int y;
for (y = 0; y < 11; y++){
text = testvalue[y];
for (x = 0; text[x] != '\0'; x++) {
printf("**********************\n");
printf("%s\n", text);
if (isPalindrom(text) == 1)
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
removeNonLetters(text);
printf("Nach RemoveNonLetters %s\n", text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
toLower(text);
printf("Nach toLower %s\n", text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
}
}
text = teststring;
}
if (choice == 2)
return 0;
choice = -1;
} while (choice >2 || choice <0);
}
int isPalindrom(char *text){
int x;
int laenge;
int y = 0;
for (laenge = 0; text[laenge] != '\0'; laenge++);
laenge=laenge-1;
for (x = 0; x <= laenge; x++)
{
if (text[x] == text[laenge - x])
y++;
}
if (y == laenge)
return 1;
else
return 0;
}
char toLower(char *text){
int laenge;
int x;
for (laenge = 0; text[laenge] != '\0'; laenge++)
laenge = laenge - 1;
for (x = 0; x <= laenge;x++)
{
if (text[x] > 65 && text[x]<91){
text[x] += 32;
}
}
return 0;
}
char removeNonLetters(char *text){
int laenge;
int z;
for (laenge = 0; text[laenge] != '\0'; laenge++)
{
while (text[laenge] < 65 || (text[laenge]>90 && text[laenge] < 97) || text[laenge]>122)
{
for (z = laenge; text[z] != '\0'; z++)
text[z] = text[z + 1];
laenge = laenge - 1;
}
}
return 0;
}[/src]
Compiliert soweit ohne Fehler allerdings Stürzt es bei beiden Menü Optionen ab. Problem ist offenbar dass sowohl das einlesen eines neuen Werts als auch das Testen mit dem Testarray "testvalue" aus dem vorgesehenen Speicherbereich läuft Ich bin mir Relativ Sicher das mit dem Pointer *text etwas nicht okay ist allerdings wundert mich dass das einlesen eines Testwertes in das Array "teststring" laut Visual Studio 2013 schon abstürzt.
Für Hilfe bin ich aktuell echt dankbar ich komm da gerade nicht wirklich weiter
Folgendes Programm hab ich für eine Übung zusammengebastelt: http://pastebin.com/dz2gMR7G
[src=c]#include <stdio.h>
int isPalindrom(char *text);
char toLower(char *text);
char removeNonLetters(char *text);
int main(int){
char teststring[31];
char *testvalue[] = { "Ha/n/nah", "La-ger-regal", "O%t/to", "(Reit-)tier", "Reliefpfeiler", "Ren--tner", "R!o!t)or", "st--ets", "nein", "Hall67o", "Lastwa$gen" };
char *text;
int x;
text = teststring;
int choice = -1;
do{
printf("---Paldindrom---\nOptionen:\n");
printf("0 = Eigenen String eingeben\n");
printf("1 = Teststring durchkauen und ausspucken\n");
printf("2 = Programm beenden\n");
scanf_s("%d", &choice);
if (choice == 0)
{
printf("Bitte Testwort eingeben: ");
gets_s(teststring,30);
printf("%s\n", *text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
removeNonLetters(text);
printf("Nach RemoveNonLetters %s", *text);
printf("%s\n", *text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
toLower(text);
printf("Nach toLower %s", *text);
printf("%s\n", *text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
}
if (choice == 1)
{
int y;
for (y = 0; y < 11; y++){
text = testvalue[y];
for (x = 0; text[x] != '\0'; x++) {
printf("**********************\n");
printf("%s\n", text);
if (isPalindrom(text) == 1)
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
removeNonLetters(text);
printf("Nach RemoveNonLetters %s\n", text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
toLower(text);
printf("Nach toLower %s\n", text);
if (isPalindrom(text))
printf("Es handelt sich um ein Palindrom.\n");
else
printf("kein Palindrom\n");
}
}
text = teststring;
}
if (choice == 2)
return 0;
choice = -1;
} while (choice >2 || choice <0);
}
int isPalindrom(char *text){
int x;
int laenge;
int y = 0;
for (laenge = 0; text[laenge] != '\0'; laenge++);
laenge=laenge-1;
for (x = 0; x <= laenge; x++)
{
if (text[x] == text[laenge - x])
y++;
}
if (y == laenge)
return 1;
else
return 0;
}
char toLower(char *text){
int laenge;
int x;
for (laenge = 0; text[laenge] != '\0'; laenge++)
laenge = laenge - 1;
for (x = 0; x <= laenge;x++)
{
if (text[x] > 65 && text[x]<91){
text[x] += 32;
}
}
return 0;
}
char removeNonLetters(char *text){
int laenge;
int z;
for (laenge = 0; text[laenge] != '\0'; laenge++)
{
while (text[laenge] < 65 || (text[laenge]>90 && text[laenge] < 97) || text[laenge]>122)
{
for (z = laenge; text[z] != '\0'; z++)
text[z] = text[z + 1];
laenge = laenge - 1;
}
}
return 0;
}[/src]
Compiliert soweit ohne Fehler allerdings Stürzt es bei beiden Menü Optionen ab. Problem ist offenbar dass sowohl das einlesen eines neuen Werts als auch das Testen mit dem Testarray "testvalue" aus dem vorgesehenen Speicherbereich läuft Ich bin mir Relativ Sicher das mit dem Pointer *text etwas nicht okay ist allerdings wundert mich dass das einlesen eines Testwertes in das Array "teststring" laut Visual Studio 2013 schon abstürzt.
Für Hilfe bin ich aktuell echt dankbar ich komm da gerade nicht wirklich weiter
Zuletzt bearbeitet: