我尝试编写一个函数,该函数返回字符串的副本,其中带前导字符和尾随字符,这些字符存储在“字符”中。例如:
strip("-__-ceng_240---__,," , "_-,")
return "ceng_240"这是我的代码,但不起作用。我想我有点小问题,但我找不到。
char* strip(char* string, char* characters) {
int i,j,k=0;
char* astring = malloc((strlen(string)+1));
for(i=0;string[i]!='\0';i++) {
for(j=0;characters[j]!='\0';j++) {
if(string[i]==characters[j])
continue;
else if(string[i]!=characters[j]) {
astring[k] = string[i];
k++;
break;
}
}
}
astring[k] = '\0';
astring = realloc(astring,strlen(astring));
return astring;
}发布于 2016-05-19 20:47:18
我把这个trim==修剪称为左&右修剪,就像这个工作样例:
#include <stdio.h>
char* trim_left(char* s, char* p) {
char*q;
while (*s){
q = p;
while (*q){
if (*s != *q)q++; else { s++; break; }
}
if (!*q)break;
}
return s;
}
char* trim_right(char* s, char* p) {
char *r = s;
char*q;
while (*s) s++;
s--;
while (s != r){
q = p;
while (*q){
if (*s != *q)q++; else { s--; break; }
}
if (!*q)break;
}
s++;
*s = 0;
return r;
}
char* trim(char* s, char* p) {
return trim_left(trim_right(s, p), p);
}
int main(){
char str[] = "-__-ceng_240---__,,";
char *p = trim(str, "_-,");
printf("%s", p); //ceng_240
//return "ceng_240"
}另一种使用助手函数is_trimchar的方法:
#include <stdio.h>
char trim_chars[] = "_-,";
int is_trimchar(char c){
char *p = trim_chars;
do{
if (*p == c)return 1;
p++;
} while (*p);
return 0;
}
char* trim_left(char* s) {
while (*s)
if (is_trimchar(*s)) s++; else break;
return s;
}
char* trim_right(char* s) {
char *r = s;
while (*s) s++;
s--;
while (s != r)
if (is_trimchar(*s)) s--; else break;
s++;
*s = 0;
return r;
}
char* trim(char* s) {
return trim_left(trim_right(s));
}
int main(){
char str[] = "-__-ceng_240---__,,";
char *p = trim(str);
printf("%s", p); //ceng_240
//return "ceng_240"
}发布于 2016-05-19 20:07:40
尝试:char* astring =(char*)malloc(sizeof(char) * (strlen(string)+1));
发布于 2016-05-19 20:17:53
试试这个:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* strip(char* string, char* characters) {
int i, j, k;
char *p = string + strspn(string, characters);//skip front
char *astring = malloc(strlen(p)+1);
for(j=i=0; p[i] != '\0'; i++) {
astring[j++] = p[i];//copy
}
astring[j] = '\0';
for(k = j -1; k >= 0; --k){//delete from tail
if(strchr(characters, astring[k]))
astring[k] = '\0';
else
break;
}
astring = realloc(astring, strlen(astring) + 1);//need +1
return astring;
}
int main(void){
char *result = strip("-__-ceng_240---__,," , "_-,");
printf("'%s'\n", result);
free(result);
return 0;
}https://stackoverflow.com/questions/37332811
复制相似问题