我正在尝试删除给定字符串中的所有重复字符。 例如" 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);
}
答案 0 :(得分:2)
在您的代码中,str
指向字符串文字,可能无法修改。尝试使用由字符串初始化的数组。
答案 1 :(得分:1)
在main中,您已将str声明为指向字符串的指针
因此存储在程序中被分配为固定字符串而不是数据
因此,当您尝试在第18行str[j++]=str[i]
处写信时,会有一个
SEGV因为这是不允许的
要更正此问题,请将字符串声明为已初始化的字符数组
int main(){
char str[] = "asdasd";
delMul(str);
puts(str);
}