📄 test_yc_string.c
字号:
#ifdef _MSC_VER
#pragma warning(disable:4127)
#pragma warning(disable:4244)
#endif
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
#include <wchar.h>
#endif
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../../young/youngc.h"
#ifdef __cplusplus
using namespace youngc;
#endif
void test_string( void )
{
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
char get[8] = {0};
#endif
bool testwchar = false;
long double ldmin = LDBL_MIN;
long double ldmax = LDBL_MAX;
ncstring str;
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
wcstring wstr;
#endif
printf( "\nsize of dystring = %u\n", sizeof(dystring) );
printf( "STATIC_NCSTR_LEN = %u\n", STATIC_NCSTR_LEN );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
printf( "STATIC_WCSTR_LEN = %u\n", STATIC_WCSTR_LEN );
#endif
printf( "\n\n" );
ncstr_init( &str );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
wcstr_init( &wstr );
printf( "test wide character(y/n)\n" );
scanf( "%s", get );
'y' == get[0] ? (testwchar = true) : (testwchar = false);
#endif
while( 1 )
{
int choice = 0;
printf( "\n\n" );
printf( " 1: test string init_copy\n" );
printf( " 2: test string assign_copy\n" );
printf( " 3: test string init_move\n" );
printf( " 4: test string assign_move\n" );
printf( " 5: test string begin\n" );
printf( " 6: test string end\n" );
printf( " 7: test string index\n" );
printf( " 8: test string at\n" );
printf( " 9: test string max_size\n" );
printf( " 10: test string size\n" );
printf( " 11: test string capacity\n" );
printf( " 12: test string space\n" );
printf( " 13: test string pop_back\n" );
printf( " 14: test string push_back\n" );
printf( " 15: test string reserve\n" );
printf( " 16: test string erase_pos\n" );
printf( " 17: test string erase_range\n" );
printf( " 18: test string insert_value\n" );
printf( " 19: test string insert_array\n" );
printf( " 20: test string resize\n" );
printf( " 21: test string replace_fill\n" );
printf( " 22: test string replace_array\n" );
printf( " 23: test string getline\n" );
printf( " 24: test string fgetline\n" );
printf( " 25: test string format\n" );
printf( " 26: test string to_string\n" );
printf( " 27: test string put\n" );
printf( " 0: exit\n\n\n" );
scanf( "%d", &choice );
switch( choice )
{
case 0 :
goto EXIT;
case 1:
if( false == testwchar )
{
ncstring str1;
if( 0 == ncstr_init_copy(&str1, &str) )
printf( "copy error!\n" );
else
{
printf( "src: %s\n", ncstr_to_string(&str) );
printf( "dst: %s\n", ncstr_to_string(&str1) );
}
ncstr_destroy( &str );
ncstr_init_copy( &str, &str1 );
ncstr_destroy( &str1 );
}
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
{
wcstring wstr1;
if( 0 == wcstr_init_copy(&wstr1, &wstr) )
printf( "copy error!\n" );
else
{
wprintf( L"src: %ls\n", wcstr_to_wstring(&wstr) );
wprintf( L"dst: %ls\n", wcstr_to_wstring(&wstr1) );
}
wcstr_destroy( &wstr );
wcstr_init_copy( &wstr, &wstr1 );
wcstr_destroy( &wstr1 );
}
#endif
break;
case 2:
if( false == testwchar )
{
ncstring str1;
ncstr_init( &str1 );
if( 0 == ncstr_assign_copy(&str1, &str) )
printf( "copy error!\n" );
else
{
printf( "src: %s\n", ncstr_to_string(&str) );
printf( "dst: %s\n", ncstr_to_string(&str1) );
}
ncstr_destroy( &str );
ncstr_assign_copy( &str, &str1 );
ncstr_destroy( &str1 );
}
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
{
wcstring wstr1;
wcstr_init( &wstr1 );
if( 0 == wcstr_assign_copy(&wstr1, &wstr) )
printf( "copy error!\n" );
else
{
wprintf( L"src: %ls\n", wcstr_to_wstring(&wstr) );
wprintf( L"dst: %ls\n", wcstr_to_wstring(&wstr1) );
}
wcstr_destroy( &wstr );
wcstr_assign_copy( &wstr, &wstr1 );
wcstr_destroy( &wstr1 );
}
#endif
break;
case 3:
if( false == testwchar )
{
ncstring str1;
ncstr_init_move( &str1, &str );
printf( "src: %s\n", ncstr_to_string(&str) );
printf( "dst: %s\n", ncstr_to_string(&str1) );
ncstr_destroy( &str1 );
}
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
{
wcstring wstr1;
wcstr_init_move( &wstr1, &wstr );
wprintf( L"src: %ls\n", wcstr_to_wstring(&wstr) );
wprintf( L"dst: %ls\n", wcstr_to_wstring(&wstr1) );
wcstr_destroy( &wstr1 );
}
#endif
break;
case 4:
if( false == testwchar )
{
ncstring str1;
ncstr_init( &str1 );
ncstr_assign_move( &str1, &str );
printf( "src: %s\n", ncstr_to_string(&str) );
printf( "dst: %s\n", ncstr_to_string(&str1) );
ncstr_destroy( &str1 );
}
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
{
wcstring wstr1;
wcstr_init( &wstr1 );
wcstr_assign_move( &wstr1, &wstr );
wprintf( L"src: %ls\n", wcstr_to_wstring(&wstr) );
wprintf( L"dst: %ls\n", wcstr_to_wstring(&wstr1) );
wcstr_destroy( &wstr1 );
}
#endif
break;
case 5:
if( false == testwchar )
printf( "address of begin: %p\n", ncstr_begin(&str) );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
wprintf( L"address of begin: %p\n", wcstr_begin(&wstr) );
#endif
break;
case 6:
if( false == testwchar )
printf( "address of end: %p\n", ncstr_end(&str) );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
wprintf( L"address of end: %p\n", wcstr_end(&wstr) );
#endif
break;
case 7:
{
size_t i = 0;
printf( "please input index\n" );
scanf( "%u", &i );
if( false == testwchar )
printf( "str[%u]: %c\n", i, *ncstr_index(&str, i) );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
wprintf( L"wstr[%u]: %lc\n", i, *wcstr_index(&wstr, i) );
#endif
break;
}
case 8:
{
size_t i = 0;
printf( "please input index\n" );
scanf( "%u", &i );
if( false == testwchar )
{
char* c = ncstr_at( &str, i );
c ? printf( "str[%u]: %c\n", i, *c )
: printf( "out of range!\n" ) ;
}
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
{
wchar_t* wc = wcstr_at( &wstr, i );
wc ? wprintf( L"wstr[%u]: %lc\n", i, *wc )
: wprintf( L"out of range!\n" );
}
#endif
break;
}
case 9:
if( false == testwchar )
printf( "max size of string: %u\n", ncstr_max_size() );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
printf( "max size of wstring: %u\n", wcstr_max_size() );
#endif
break;
case 10:
if( false == testwchar )
printf( "size of string: %u\n", ncstr_size(&str) );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
printf( "size of wstring: %u\n", wcstr_size(&wstr) );
#endif
break;
case 11:
if( false == testwchar )
printf( "capacity of string: %u\n", ncstr_capacity(&str) );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
printf( "capacity of wstring: %u\n", wcstr_capacity(&wstr) );
#endif
break;
case 12:
if( false == testwchar )
printf( "space of string: %u\n", ncstr_space(&str) );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
printf( "space of wstring: %u\n", wcstr_space(&wstr) );
#endif
break;
case 13:
if( false == testwchar )
ncstr_pop_back( &str );
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
wcstr_pop_back( &wstr );
#endif
break;
case 14:
if( false == testwchar )
{
char getc[8];
printf( "please input a character\n" );
scanf( "%s", getc );
ncstr_push_back( &str, getc[0] );
}
#ifdef __MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
else
{
wchar_t getwc[8];
printf( "please input a wide character\n" );
wscanf( L"%ls", getwc );
wcstr_push_back( &wstr, getwc[0] );
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -