2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team,
6 * check out http://www.gromacs.org for more information.
7 * Copyright (c) 2012, by the GROMACS development team, led by
8 * David van der Spoel, Berk Hess, Erik Lindahl, and including many
9 * others, as listed in the AUTHORS file in the top-level source
10 * directory and at http://www.gromacs.org.
12 * GROMACS is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 2.1
15 * of the License, or (at your option) any later version.
17 * GROMACS is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with GROMACS; if not, see
24 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
25 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 * If you want to redistribute modifications to GROMACS, please
28 * consider that scientific software is very special. Version
29 * control is crucial - bugs must be traceable. We will be happy to
30 * consider code for inclusion in the official distribution, but
31 * derived work must not be called official GROMACS. Details are found
32 * in the README & COPYING files - if they are missing, get the
33 * official version at http://www.gromacs.org.
35 * To help us fund GROMACS development, we humbly ask that you cite
36 * the research papers on the package. Check out http://www.gromacs.org.
38 /* This file is completely threadsafe - keep it that way! */
49 char *replace(const char *string,const char *search,const char *replace)
51 char *buf=NULL,*ptr=NULL,*bufptr=NULL;
52 int blen,stringlen,slen,rlen;
56 stringlen=strlen(string);
57 if ((string == NULL) || (slen == 0) || (stringlen == 0)) {
59 buf=gmx_strdup(string);
63 blen=max(stringlen,(rlen*stringlen)/slen);
68 while ((ptr=strstr(bufptr,search)) != NULL) {
70 for(i=0; (i<rlen); i++)
73 while (ptr[i+slen-rlen] != '\0') {
74 ptr[i]=ptr[i+slen-rlen];
82 for(j=tmp; (j>=slen); j--)
83 ptr[rlen-slen+j]=ptr[j];
84 for(i=0; (i<rlen); i++)
93 char *replaceww(const char *string,const char *search,const char *replace)
95 char *buf=NULL,*ptr=NULL,*bufptr=NULL;
96 int buflen,stringlen,searchlen,replacelen;
99 searchlen=strlen(search);
100 stringlen=strlen(string);
101 if ((string == NULL) || (searchlen == 0) || (stringlen == 0)) {
103 buf=gmx_strdup(string);
106 replacelen=strlen(replace);
107 buflen=max(stringlen,(replacelen*stringlen)/searchlen);
112 while ((ptr=strstr(bufptr,search)) != NULL) {
113 if (((ptr==bufptr) || !isalnum(ptr[-1])) && !isalnum(ptr[searchlen])) {
114 if (replacelen <= searchlen) {
115 for(i=0; (i<replacelen); i++)
117 if (replacelen < searchlen) {
118 while (ptr[i+searchlen-replacelen] != '\0') {
119 ptr[i]=ptr[i+searchlen-replacelen];
126 for(j=strlen(ptr); (j>=searchlen); j--)
127 ptr[replacelen-searchlen+j]=ptr[j];
128 for(i=0; (i<replacelen); i++)
131 bufptr=ptr+replacelen;
133 bufptr=ptr+searchlen;
140 void main(int argc,char *argv[])
142 printf("String was: '%s' Search: '%s' Replace: '%s'\n",
143 argv[1],argv[2],argv[3]);
144 printf("String now: '%s'\n\n",replace(argv[1],argv[2],argv[3]));