Anonymous user
Strip control codes and extended characters from a string: Difference between revisions
Strip control codes and extended characters from a string (view source)
Revision as of 23:59, 6 December 2019
, 4 years ago→{{header|C}}
Langurmonkey (talk | contribs) |
|||
Line 260:
#include <string.h>
#define MAXBUF 256 /* limit */
#define STR_SZ 100 /* string size */
/* function prototypes */
int ascii (const unsigned char c);
int ascii_ext (const unsigned char c);
unsigned char* strip(unsigned char* str, const size_t n, int ext );
/* check character
return 1 for true
0 for false
*/
int ascii (const unsigned char c)
{
unsigned char min = 32;
unsigned char max = 126;
if ( c>=min && c<=max ) return 1;
return 0;
}
/* check i extended character
return 1 for true
0 for false
*/
int ascii_ext (const unsigned char c)
{
unsigned char min_ext = 128;
unsigned char max_ext = 255;
if ( c>=min_ext && c<=max_ext )
return 1;
return 0;
}
/* fill buffer
then rewrite string from buffer
limit to n < MAX chars
*/
unsigned char* strip( unsigned char* str, const size_t n, int ext)
{
unsigned char buffer[MAXBUF] = {'\0'};
size_t i = 0; // source index
size_t j = 0; // dest index
size_t max = (n<MAXBUF)? n : MAXBUF -1; // limit size
while (i < max )
{
if (
{
buffer[j++] = str[i]; // assign
}
i++;
}
memset(str, '\0',
i = 0; // reset count
while( i < j)
{
Line 305 ⟶ 337:
i++;
}
str[j] = '\0'; // terminate properly
return str; //
}
/* try it out */
int main( int argc, char** argv)
{
unsigned
enum {ASCII=0, EXT=1};
unsigned char badstring[STR_SZ] = {'\0'};
unsigned char bs_2[STR_SZ] = {'\0'};
unsigned char* goodstring = NULL;
unsigned char* goodstring_ext = NULL;
size_t i = 0;
srand(seed); // seed RNG
fprintf(stdout, "Original:\t" );
for (i = 0; i < STR_SZ; i++)
{
// set random 8 bit bytes in string (0 - 255)
badstring[i] = (unsigned char) ( rand () & (unsigned char)0xFF );
fprintf(stdout, "%c", badstring[i] );
}
fprintf(stdout, "\n");
memcpy(bs_2, badstring, STR_SZ * sizeof(unsigned char) ); /* copy string */
goodstring_ext = strip( badstring, STR_SZ, EXT); // remove non extended and non ascii
fprintf(stdout, "\nEXT:\t%s\n" , goodstring_ext );
goodstring = strip( bs_2, STR_SZ, ASCII); // remove non ascii
fprintf(stdout, "\nASCII:\t%s\n" , goodstring );
return 0;
}</lang>
{{out}}
<span style="color:blue;font-size:1em">
Original: ƒ˜v�ý8Ç…Ø×�B„…â¤Ê8ln9V¢DèÝz�@ÅTÃ]ÊÙZ� ßÚwo�ûôÿ ¾8
,qcζK¬0aìõ¶¯R€ˆƒ(Œ]Ÿüz›ðz;¯²GÛ#ªªÙöV WñQŽyþ�¡
</span>
<span style="color:black;font-size:1em">
EXT: ƒ˜vý8Ç…Ø×�B„…â¤Ê8ln9V¢DèÝz@ÅTÃ]ÊÙZ ßÚwoûôÿ ¾8,qcζK¬0aìõ¶¯R€ˆƒ(Œ]Ÿüz›ðz;¯²GÛ#ªªÙöVWBþñQŽyþ¡
</span>
<span style="color:blue;font-size:1em">
ASCII: v8B8ln9VDz@T]Zwo8,qcK0aR(]zz;G#VWBQy
</span>
|