3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2004, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
33 * GROningen Mixture of Alchemy and Childrens' Stories
35 /* This file is completely threadsafe - keep it that way! */
46 char *replace(const char *string
,const char *search
,const char *replace
)
48 char *buf
=NULL
,*ptr
=NULL
,*bufptr
=NULL
;
49 int blen
,stringlen
,slen
,rlen
;
53 stringlen
=strlen(string
);
54 if ((string
== NULL
) || (slen
== 0) || (stringlen
== 0)) {
60 blen
=max(stringlen
,(rlen
*stringlen
)/slen
);
65 while ((ptr
=strstr(bufptr
,search
)) != NULL
) {
67 for(i
=0; (i
<rlen
); i
++)
70 while (ptr
[i
+slen
-rlen
] != '\0') {
71 ptr
[i
]=ptr
[i
+slen
-rlen
];
79 for(j
=tmp
; (j
>=slen
); j
--)
80 ptr
[rlen
-slen
+j
]=ptr
[j
];
81 for(i
=0; (i
<rlen
); i
++)
90 char *replaceww(const char *string
,const char *search
,const char *replace
)
92 char *buf
=NULL
,*ptr
=NULL
,*bufptr
=NULL
;
93 int buflen
,stringlen
,searchlen
,replacelen
;
96 searchlen
=strlen(search
);
97 stringlen
=strlen(string
);
98 if ((string
== NULL
) || (searchlen
== 0) || (stringlen
== 0)) {
103 replacelen
=strlen(replace
);
104 buflen
=max(stringlen
,(replacelen
*stringlen
)/searchlen
);
109 while ((ptr
=strstr(bufptr
,search
)) != NULL
) {
110 if (((ptr
==bufptr
) || !isalnum(ptr
[-1])) && !isalnum(ptr
[searchlen
])) {
111 if (replacelen
<= searchlen
) {
112 for(i
=0; (i
<replacelen
); i
++)
114 if (replacelen
< searchlen
) {
115 while (ptr
[i
+searchlen
-replacelen
] != '\0') {
116 ptr
[i
]=ptr
[i
+searchlen
-replacelen
];
123 for(j
=strlen(ptr
); (j
>=searchlen
); j
--)
124 ptr
[replacelen
-searchlen
+j
]=ptr
[j
];
125 for(i
=0; (i
<replacelen
); i
++)
128 bufptr
=ptr
+replacelen
;
130 bufptr
=ptr
+searchlen
;
137 void main(int argc
,char *argv
[])
139 printf("String was: '%s' Search: '%s' Replace: '%s'\n",
140 argv
[1],argv
[2],argv
[3]);
141 printf("String now: '%s'\n\n",replace(argv
[1],argv
[2],argv
[3]));