1 /* Martin Asser Hansen (mail@maasha.dk) Copyright (C) 2008 - All right reserved */
7 size_t chop( char *string )
9 /* 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 */
31 /* Removes the last char from a string if the char is a newline. */
32 /* Returns the length of the chomped string or -1 is no newline was found. */
36 assert( string != NULL );
37 assert( string[ 0 ] != '\0' );
39 len = strlen( string );
41 if ( string[ len - 1 ] == '\n' )
43 string[ len - 1 ] = '\0';
54 size_t strchr_total( const char *string, const char c )
56 /* Martin A. Hansen, September 2008 */
58 /* Returns the total number of a given char in a given string. */
60 int count[ 256 ] = { 0 }; /* Integer array spanning the ASCII alphabet */
63 for ( i = 0; i < strlen( string ); i++ ) {
64 count[ ( int ) string[ i ] ]++;
67 return count[ ( int ) c ];
71 size_t match_substr( size_t pos, char *str, size_t str_len, char *substr, size_t substr_len, size_t mismatch )
73 /* Martin A. Hansen, August 2008 */
75 /* Locate a substr in a str starting at pos allowing for a given number of mismatches. */
76 /* Returns position of match begin or -1 if not found. */
83 assert( pos < str_len );
84 assert( str != NULL );
85 assert( substr != NULL );
86 assert( str_len > 0 );
87 assert( substr_len > 0 );
88 assert( strlen( str ) == str_len );
89 assert( strlen( substr ) == substr_len );
90 assert( mismatch >= 0 );
91 assert( mismatch < substr_len );
92 assert( substr_len <= str_len );
93 assert( str[ str_len ] == '\0' );
94 assert( substr[ substr_len ] == '\0' );
96 for ( i = pos; i < str_len - substr_len + 1; i++ )
100 for ( j = 0; j < substr_len; j++ )
102 if ( str[ i + j ] != substr[ j ] )
106 if ( count > mismatch ) {
112 if ( count <= mismatch ) {
121 size_t match_substr_rev( size_t pos, char *str, size_t str_len, char *substr, size_t substr_len, size_t mismatch )
123 /* Martin A. Hansen, August 2008 */
125 /* Locate a substr in a str backwards starting at the end of */
126 /* str minus pos allowing for a given number of mismatches. */
127 /* Returns position of match begin or -1 if not found. */
134 assert( pos < str_len );
135 assert( str != NULL );
136 assert( substr != NULL );
137 assert( str_len > 0 );
138 assert( substr_len > 0 );
139 assert( strlen( str ) == str_len );
140 assert( strlen( substr ) == substr_len );
141 assert( mismatch >= 0 );
142 assert( mismatch < substr_len );
143 assert( substr_len <= str_len );
144 assert( str[ str_len ] == '\0' );
145 assert( substr[ substr_len ] == '\0' );
147 for ( i = str_len - pos - 1; i >= substr_len - 1; i-- )
151 for ( j = substr_len - 1; j > 0; j-- )
153 if ( str[ i - ( substr_len - j - 1 ) ] != substr[ j ] )
155 /* printf( "i:%ld j:%ld count:%ld str:%c substr:%c\n", i, j, count, str[ i - ( substr_len - j - 1 ) ], substr[ j ] ); // DEBUG */
158 if ( count > mismatch ) {
164 if ( count <= mismatch ) {
165 return i - substr_len + 1;