首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现字符指针数组函数?

如何实现字符指针数组函数?
EN

Stack Overflow用户
提问于 2016-05-19 19:53:31
回答 5查看 76关注 0票数 1

我尝试编写一个函数,该函数返回字符串的副本,其中带前导字符和尾随字符,这些字符存储在“字符”中。例如:

代码语言:javascript
复制
  strip("-__-ceng_240---__,," , "_-,") 

  return "ceng_240"

这是我的代码,但不起作用。我想我有点小问题,但我找不到。

代码语言:javascript
复制
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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-19 20:47:18

我把这个trim==修剪称为左&右修剪,就像这个工作样例:

代码语言:javascript
复制
#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的方法:

代码语言:javascript
复制
#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"
}
票数 1
EN

Stack Overflow用户

发布于 2016-05-19 20:07:40

尝试:char* astring =(char*)malloc(sizeof(char) * (strlen(string)+1));

票数 0
EN

Stack Overflow用户

发布于 2016-05-19 20:17:53

试试这个:

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37332811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档