5 size_t chop( char *string )
7 /* Martin A. Hansen, June 2008 */
11 /* Remove the last char from a string. */
12 /* Returns the length of the chopped string.*/
14 assert( string != NULL );
15 assert( string[ 0 ] != '\0' );
19 len = strlen( string );
21 string[ len - 1 ] = '\0';
27 size_t chomp( char *string )
29 /* Martin A. Hansen, June 2008 */
33 /* Removes the last char from a string if the char is a newline. */
34 /* Returns the length of the chomped string or -1 is no newline was found. */
38 assert( string != NULL );
39 assert( string[ 0 ] != '\0' );
41 len = strlen( string );
43 if ( string[ len - 1 ] == '\n' )
45 string[ len - 1 ] = '\0';
56 size_t match_substr( size_t pos, char *str, size_t str_len, char *substr, size_t substr_len, size_t mismatch )
58 /* Martin A. Hansen, August 2008. */
62 /* Locate a substr in a str starting at pos allowing for a given number of mismatches. */
63 /* Returns position of match begin or -1 if not found. */
70 assert( pos < str_len );
71 assert( str != NULL );
72 assert( substr != NULL );
73 assert( str_len > 0 );
74 assert( substr_len > 0 );
75 assert( strlen( str ) == str_len );
76 assert( strlen( substr ) == substr_len );
77 assert( mismatch >= 0 );
78 assert( mismatch < substr_len );
79 assert( substr_len <= str_len );
80 assert( str[ str_len ] == '\0' );
81 assert( substr[ substr_len ] == '\0' );
83 for ( i = pos; i < str_len - substr_len + 1; i++ )
87 for ( j = 0; j < substr_len; j++ )
89 if ( str[ i + j ] != substr[ j ] )
93 if ( count > mismatch ) {
99 if ( count <= mismatch ) {
108 size_t match_substr_rev( size_t pos, char *str, size_t str_len, char *substr, size_t substr_len, size_t mismatch )
110 /* Martin A. Hansen, August 2008. */
114 /* Locate a substr in a str backwards starting at the end of */
115 /* str minus pos allowing for a given number of mismatches. */
116 /* Returns position of match begin or -1 if not found. */
123 assert( pos < str_len );
124 assert( str != NULL );
125 assert( substr != NULL );
126 assert( str_len > 0 );
127 assert( substr_len > 0 );
128 assert( strlen( str ) == str_len );
129 assert( strlen( substr ) == substr_len );
130 assert( mismatch >= 0 );
131 assert( mismatch < substr_len );
132 assert( substr_len <= str_len );
133 assert( str[ str_len ] == '\0' );
134 assert( substr[ substr_len ] == '\0' );
136 for ( i = str_len - pos - 1; i >= substr_len - 1; i-- )
140 for ( j = substr_len - 1; j > 0; j-- )
142 if ( str[ i - ( substr_len - j - 1 ) ] != substr[ j ] )
144 /* printf( "i:%ld j:%ld count:%ld str:%c substr:%c\n", i, j, count, str[ i - ( substr_len - j - 1 ) ], substr[ j ] ); // DEBUG */
147 if ( count > mismatch ) {
153 if ( count <= mismatch ) {
154 return i - substr_len + 1;