# String einlesen, größten Buchstaben ausgeben



## Julezzz (12. Dezember 2009)

Hallo! Panik!

Also das Programm soll einen String einlesen und den größten Buchstaben (also den kleinsten Wert nach ASCII-Tabelle) ausgeben. Ich habe bisher nur diesen Müll zusammenbekommen: 


```
#include <iostream>
#include <string>
using namespace std;


void readString(char *wort, int laenge);

void main ()


{
	const int laenge=12;
	char wort[laenge]={};
	


	cout << "Bitte geben Sie ein Wort ein\n";

	
	readString (wort, laenge);
	
	max = wort[0];
	for (int i=0; i<laenge; i++)
		

	{
		if (wort[i] > max)
		{
			max = wort[i];
		}
	}	

		cout << max;

}




void readString(char *wort, int laenge)
{	
	bool abbruch = false;
	char testeing;
	int input;
	int i=0;

	while(abbruch == false)
		{	
			cin.get(testeing);
			input = int (testeing);
			wort[i] = testeing;
			if(input != 10) 
				i++;
			if((input == 10) || (i >= laenge))
				abbruch = true; 
		}
	return;
}
```

Wobei ich nicht mal weiß, ob dieses void readString notwendig ist -.-

Könnt ihr mir bitte bitte helfen? 

Dazu muss gesagt werden, dass ich mir bei der Aufgabenstellung nicht sicher bin, ob die Buchstabenanzahl vorgegeben werden muss. Ich habs erstmal mit der Zahl 12 probiert.
DANKE!


----------



## sheel (12. Dezember 2009)

Hi,
Also erstens: Benutze bitte die Code-Tags, so wird das Programm schon um einiges lesbarer
Zweitens:Was meinst du mit dem "größten Buchstaben, also den kleinsten Asciiwert"?
Zurzeit suchst du den größten Asciiwert

readstring ist nicht notwendig

Ich bin mir nicht ganz sicher, ob du eigentlich C oder C++ verwenden willst (char* und cout...), ich hab hier einmal eine C-Lösung:


```
#include<stdio.h>

int main()
{
    char c[128],d=0;
    gets(c);
    for(int i=0;i<strlen(c);i++)
    {
        if(d<c[i])
            d=c[i];
    }
    printf("%c\n",d);
}
```

Gruß


----------



## Julezzz (13. Dezember 2009)

Hi, ja ich will in C++ programmieren. Den kleinsten Wert suche ich, weil die großen Buchstaben die kleineren hex-Werte haben als die kleinen Buchsstaben. 'A' hat z.B. den Wert 41, während 'a' den Wert 61 hat. Also suche ich den kleinsten Wert des ganzen Wortes. Ich versuch's aber mal mit deiner Lösung.

Danke!


----------



## sheel (13. Dezember 2009)

Nicht ganz: A ist 65, a 97
In sich drinn sind sie aber wieder normal geordnet, dh
65: A
66: B
...

Genau so, wie du beschrieben hast, arbeitet mein Programm übrigens 

Edit: Hab nen kleinen Fehler entdeckt: nach dem gets(c) kommt noch ein d=*c; rein


----------



## Julezzz (13. Dezember 2009)

Danke ^^ Ich benutz visual studio und sowas wie strlen kennt er gar nicht...


----------



## sheel (13. Dezember 2009)

Kein strlen?
Sehr seltsam...was meckert er denn sonst noch?


----------



## deepthroat (13. Dezember 2009)

Hi.

strlen ist in string.h deklariert. \edit: also ist in C++ <cstring> einzubinden.

Gruß


----------



## Julezzz (13. Dezember 2009)

ok, ich hab es irgendwie geschafft, dass er den größten Wert, also den kleinsten Buchstaben ausgibt 

#include<iostream> 
#include<string>
using namespace std;





```
void main()
{  int min;
	char arrayw[6]={};
	

 cin >> arrayw;
 
 min = arrayw[0];


 for (int i = 1; i <= 6-1; i++)
 {	
	 if (arrayw[i] > min)
	 min = arrayw[i];
 }
 
 cout << (char) min <<"\n";
 
}
```


Wenn ich aber versuche, das Gegenteil zu machen, also  

```
if (arrayw[i] < min)
```
dann gibt er NICHTS aus. Ich habe die Vermutung, dass er diese 0 am Ende von Strings damit darstellen will...


----------



## sheel (13. Dezember 2009)

Das Problem ist, dass du ja nicht weisst, ob auch tatsächlich soviel Zeichen eingegeben wurden
(Die 6-Grenze würde ich etwas erhöhen).
Wenn er zB nur "abc" schreibt, hast du abc, dann die '\0', und dann noch zwei Byte in denen irgendwas drinnensteht.
Du vergleichst die '\0' und die zwei Müllbyte auch mit

Deswegen das strlen von oben, das untersucht wie lang der String ist (bzw. wann die '\0' kommt)


----------



## Julezzz (13. Dezember 2009)

Ahhhh.. gut zu wissen! Danke schön!


----------

