C++ String überprüfen ob es ein Großbuchstaben enthält?

3 Antworten

#include<iostream>
#include<string>
bool Enthaelt_Gro3buchstaben ( std::string* Text )
{ if((*Text)=="")return false;   int Index = Text->length();
while(Index --> 0)       /* int Index= 0;// vorwaerts
while(Index++<Text->length()) */
if ((*Text)[Index] > 0x40
&&(*Text)[Index] > 0x5B)
return true ;
return false;
}
#include <algorithm>
bool Cpp11_Enthaelt_Gro3buchstaben(std::string* Text)
{ if((*Text)=="")
return false;
return std::any_of(Text->begin(), Text->end(),
[ ](unsigned char c){return std::isupper(c);} );
}/*Siehe Antwort von KarlRanseierIII. Das funktioniert ab ISO - C++11*/

int main(){
std::string A ="Tag";
std::string B ="1/2";
std::string C /* "" */;
std::cout<<Enthaelt_Gro3buchstaben(&A);
std::cout<<Enthaelt_Gro3buchstaben(&B);
std::cout<<Enthaelt_Gro3buchstaben(&C);
std::cout<<std::endl;
std::cout<<Cpp11_Enthaelt_Gro3buchstaben(&A);
std::cout<<Cpp11_Enthaelt_Gro3buchstaben(&B);
std::cout<<Cpp11_Enthaelt_Gro3buchstaben(&C);
return 0;}

Vergleiche den String mit demselben in Kleinbuchstaben:

std::string data = "Hallo";

String in Kleinbuchstaben:

std::transform(data.begin(), data.end(), data.begin(),
    [](unsigned char c){ return std::tolower(c); });
Woher ich das weiß:Berufserfahrung – Studium der Informatik + Softwareentwickler seit 25 Jahren.

Man könnte das wohl in etwa so machen, wobei s ein std::string ist:

std::any_of(s.begin(), s.end(), [](unsigned char c){return std::isupper(c);});

(Ungetestet, bin bei C++ leider nicht ganz auf der Höhe)


ptrace  28.04.2020, 01:52

Den Lambda Ausdruck kannst du weglassen und direkt durch is_upper ersetzen. :)

1
KarlRanseierIII  28.04.2020, 02:06
@ptrace

Also die Variante aus ctype.h dann? Ich hatte nämlich das hier gelesen:

Like all other functions from <cctype>, the behavior of
std::isupper
is undefined if the argument's value is neither representable as unsigned char nor equal to
EOF
. To use these functions safely with plain chars (or signed chars), the argument should first be converted to unsigned char:
1
KarlRanseierIII  28.04.2020, 02:21
@ptrace

Ja, das mit dem EOF ist so ne blöde Sache, die andere ist ja, in C ist ein char literal ein int, bei C++ ein char. (Inklusive unterschiedlichem sizeof() , und die signedness wird unterschiedliche behandelt).

Kannste Dir echt nicht ausdenken.

1