Ctype.h

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 3. august 2022; checks kræver 18 redigeringer .

ctype.h  er header-filen i standardbiblioteket for programmeringssproget C , der indeholder erklæringer om funktioner til klassificering og konvertering af individuelle tegn.

Funktioner

Alle følgende funktioner har prototyper af følgende form:

int имя_функции( int );

intAlle disse funktioner tager -ækvivalenten af ​​et tegn som et argument og returnerer en værdi af typen int, som kan repræsentere enten et andet tegn (i tilfælde af konverteringsfunktioner) eller en boolsk værdi: 0 betyder "False" og en ikke-nul værdi betyder "Sand" (dette gælder for klassifikationsfunktioner).

Disse funktioners adfærd afhænger af den aktuelle kodning . [en]

Resultatet af at anvende disse funktioner på tegn med koder, der tilhører tegnsættet med udvidet eksekveringstid ,  afhænger af platformen og lokaliseringen.

Klassifikationsfunktioner

#include <ctype.h> int isalnum ( int c ); //Hvis funktionens argument enten er et bogstav eller et tal, returnerer det en værdi, der ikke er nul. int isalpha ( int c ); //Returnerer ikke-nul, hvis argumentet er et bogstav, ellers nul. int isblank ( int c ); //Returnerer sandt, hvis c er et mellemrum eller vandret tabulator (C99). int iscntrl ( int c ); //Returnerer sandt, hvis c er et kontroltegn såsom <Ctrl+B>. int isdigit ( int c ); //Returnerer ikke-nul, hvis argumentet er et decimaltal, ellers nul. int isgraph ( int c ); //Returnerer sandt, hvis c er et udskrivbart tegn uden mellemrum. int islower ( int c ); //Returnerer sandt, hvis c er et lille bogstav. int isprint ( int c ); //Returnerer sandt, hvis c er et udskrivbart tegn. int ispunct ( int c ); //Returnerer sandt, hvis c er et tegnsætningstegn (ethvert udskrivbart tegn bortset fra et mellemrum eller alfanumerisk tegn). int isspace ( int c ); //Returnerer sandt, hvis c er et mellemrumstegn: mellemrum, nylinje, sidefeed, vognretur, lodret tabulator, vandret tabulator eller muligvis et andet implementeringsdefineret tegn int isupper ( int c ); //Returnerer sandt, hvis c er et stort tegn. int isxdigit ( int c ); //Returnerer sandt, hvis c er et hexadecimalt ciffer.

Disse funktioner kontrollerer, om argumentet er et bogstav eller ciffer, mellemrum eller tabulator, kontroltegn, decimaltegn, printbart tegn (undtagen mellemrum), små bogstaver, printbart tegn (inklusive mellemrum), mellemrum, stort tegn eller hexadecimalt tal.

Transform funktioner

#include <ctype.h> int toupper ( int c ); // konverterer små bogstaver til store bogstaver int tolower ( int c ); // konverterer store bogstaver til små bogstaver

Funktionerne konverterer tegnet c til små eller store bogstaver, hvis det er muligt. Ellers returnerer de den uændrede værdi. [en]

Implementering af funktioner

I de fleste C-biblioteker bruger klassifikationsrutiner statiske opslagstabeller i stedet for makroer eller funktioner. For eksempel oprettes en matrix med 256 otte-bit heltal, hvor hver bit står for en bestemt egenskab af et tegn (er det et tal, et bogstav osv.). Hvis bit 1 angiver, om tegnet er et ciffer eller ej, kan koden skrives således:

#define isdigit(x) (TABEL[x] & 1)

Tidlige versioner af Linux brugte potentielt farlig kode som følgende:

#define isdigit(x) ((x) >= '0' && (x) <= '9')

Dette kan give problemer, hvis for eksempel et funktionskald blev brugt som argument. I dette tilfælde var det ikke umiddelbart klart, at funktionen blev kaldt to gange.

Misbruge

I alle tilfælde er argumentet af typen int, og dets værdi skal være i intervallet type unsigned char, eller være lig med værdien af ​​EOF-makrokonstanten. Hvis argumentet har en anden værdi, er funktionernes opførsel udefineret.

Typen charkan enten være signeret eller usigneret, afhængigt af implementeringen. Hvis typen charer signeret, kan en implicit konvertering til intresultere i negative tal, hvilket vil få funktionen til at opføre sig udefineret. Oftest er opslagstabellen uden for grænserne , og programmet går ned.

//Denne kode fungerer muligvis ikke korrekt. char test = 'b' ; top ( 'a' ); int res = ispunct ( test );

For at undgå dette, når du bruger char-argumenter, skal du først eksplicit konvertere dem til int.

int-værdier returneret af funktioner getchar, getc, fgetchører nødvendigvis til rækken af ​​værdier af typen unsigned char(eller er lig med EOF), så ingen konvertering er påkrævet her.

#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #include <ctype.h> #include <string.h> int main () { setlocale ( LC_ALL , "RUS" ); tegn [ 100 ] ; int i , ind , n ; // Indledende data char ch [ 4 ]; printf ( "Indtast A, B og C, ingen mellemrum:" ); får_s ( ch ); printf ( "Indtast tekst: \n " ); får_s ( s ); //gets(funktion, en del af C Standard Library, erklæret i header-filen stdio.h , som læser en linje med standardinput og placerer den i bufferen oprettet af den kaldende funktion). n = strlen ( s ); //strlen(ser begyndelsen af ​​strengen og begynder at tælle antallet af tegn først (bytes tildelt for hver if ( islower ( ch [ 1 ]) || islower ( ch [ 2 ])) //tager et tegn (bogstav) som et argument og returnerer en heltalværdi, der ikke er nul, hvis bogstavet er lille, og nul, hvis bogstavet er stort ch [ 1 ] = ch [ 1 ] - 32 ; ch [ 2 ] = ch [ 2 ] -32 ; _ for ( i = 0 ; i < n ; i ++ ) { hvis ( s [ i ] == lm [ 0 ]) { ind = i ; if ( isdigit ( s [ i - 1 ])) //isdigit (Isdigit-funktionen kontrollerer, om argumentet, der føres gennem karakterparameteren, er et decimaltal. { bryde ; } andet { s [ i ] = lm [ 1 ]; } } } for ( i = n + 1 ; i > ind ; i -- ) { s [ i ] = s [ i - 1 ]; } s [ ind + 1 ] = lm [ 2 ]; sætter ( s ); getch (); }


Eksempler på brug

//Følgende kode læser et tegn og konverterer det til //an int, hvis der indtastes et ciffer. #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main ( void ) { int c = fgetc ( stdin ); hvis ( c != EOF ) { hvis ( er ciffer ( c ) ) printf ( "Du har indtastet et tal %i \n " , atoi (( char * ) & c ) ); andet printf ( "Det er ikke et tal! \n " ); } returnere 0 ; }

Links

Noter

  1. 12 ISO/IEC 9899: 1999 . Hentet 31. juli 2011. Arkiveret fra originalen 22. august 2011.