پیاده سازی نهایی string
۱۴۰۱ مهر ۱۴, پنجشنبه ساعت ۱۴:۴۰پیاده سازی نهایی به شکل زیر شد :
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char **strings;
int *types;
int i;
} string;
string_init( string *str ) {
str = malloc( sizeof( string ) );
str->i = 0;
str->strings = malloc( sizeof( char *) * (2) );
str->types = malloc( sizeof( int *) * (2) );
return str;
}
string_concat( string *a, string *b) {
string *r;
r = string_init( r );
string_append1( r, a );
string_append1( r, b );
return r;
}
string_append( string *str, char *str1 ) {
str->strings = realloc( str->strings, sizeof( char *) * ( str->i + 2 ) );
str->types = realloc( str->types, sizeof( int *) * ( str->i + 2 ) );
str->types[str->i] = 1;
str->strings[str->i++] = str1;
}
string_append1( string *str, string *str1 ) {
str->strings = realloc( str->strings, sizeof( char *) * ( str->i + 2 ) );
str->types = realloc( str->types, sizeof( int *) * ( str->i + 2 ) );
str->types[str->i] = 2;
str->strings[str->i++] = str1;
}
string_print( string *str ) {
for( int i = 0; i < str->i; i++ ) {
if( str->types[i] == 1 ) {
printf("%s", str->strings[i]);
} else {
string_print( str->strings[i] );
}
}
}
string_len( string *str ) {
size_t len = 0;
for( int i = 0; i < str->i; i++ ) {
len += strlen(str->strings[i]);
}
return len;
}
main() {
string *str;
str = string_init( str );
string *str1;
str1 = string_init( str1 );
string_append( str1, "abc");
string *str2;
str2 = string_init( str2 );
string_append( str2, "defghijklmnñopqrstuvwxyz");
for(int i = 0; i < 30000; i++) {
str = string_concat( str1, str );
str = string_concat( str, str2 );
}
string_print( str );
}
این خروجی با همون performance کامپایلر v8 هست.