从字符串中删除所有重复的字符 - c

时间:2015-10-07 13:50:30

标签: c string function

我正在尝试删除给定字符串中的所有重复字符。 例如" asdasd" =" asd"或" abbgga" =" abg"。

当我编译并且当cmd开始运行时,我正在"停止工作"消息。

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void delMul(char str[]){
    int i,j=0;
    int s[26];
    char k ;
    for ( i = 0; i < 26; i++)
    {
        s[i] = 0;
    }
    for (i = 0; i < strlen(str); i++)
    {
        k = str[i] - 'a'; 
        if(s[k] == 0) {
            s[k]++ ;
            str[j++] = str[i];
        }
    }
    str[j] = '\0';
}

int main(){
    char *str = "asdasd";
    delMul(str);
    puts(str);
}

2 个答案:

答案 0 :(得分:2)

在您的代码中,str指向字符串文字,可能无法修改。尝试使用由字符串初始化的数组。

答案 1 :(得分:1)

在main中,您已将str声明为指向字符串的指针

因此存储在程序中被分配为固定字符串而不是数据

因此,当您尝试在第18行str[j++]=str[i]处写信时,会有一个 SEGV因为这是不允许的

要更正此问题,请将字符串声明为已初始化的字符数组

int main(){
    char str[] = "asdasd";
    delMul(str);
    puts(str);
}
相关问题