输入字符串删除重复字符
2023-01-10阅读(781)
问:C语言 输入一个字符串 去掉重复的字符,输出无重复的
- 答:统计字符串中的重复字符,可以通过简单哈希算法来实现。
有效的字符的ascii值在0-127之间,定义一个128位的数组,初始化为0,用数组下标对应相应的字符,数组元素值表示字符出现的频率,统计相应字符的个数,个数大于1的字符就是重复的。
参考代码如下:
#include
void main()
{
char s[1024];
int carr[128]={0};
int i;
printf("input a string: ");
gets(s);
for( i=0;s[i];i++ )
{
int index=s[i];
if ( index >=0 && index <= 127 ) //安全处理,防止输入异常时,程序出错
carr[index]++ ;
}
for( i=0;i<128;i++ )
if ( carr[i] > 1 )
printf("%c:%d\n", i, carr[i] );
}运行结果:
input
a
string:
hello
world
l:3
o:2 - 答:统计字符串中的重复字符,可以通过简单哈希算法来实现。
有效的字符的ascii值在0-127之间,定义一个128位的数组,初始化为0,用数组下标对应相应的字符,数组元素值表示字符出现的频率,统计相应字符的个数,个数大于1的字符就是重复的。
参考代码如下:
#include
void main()
{
char s[1024];
int carr[128]={0};
int i;
printf("input a string: ");
gets(s);
for( i=0;s[i];i++ )
{
int index=s[i];
if ( index >=0 && index <= 127 ) //安全处理,防止输入异常时,程序出错
carr[index]++ ;
}
for( i=0;i<128;i++ )
if ( carr[i] > 1 )
printf("%c:%d\n", i, carr[i] );
}运行结果:
input
a
string:
hello
world
l:3
o:2
问:如何删除重复字符c语言
- 答:#include<stdio.h>
int main(void)
{
char s[100];
int i, j, n, k;
printf("请输入一串有重复字符的字符串:\n");
gets(s);
for (n = 0; s[n] != '\0'; n++);
for (i = 0; i < n ; i++)
{
for (j = k = i + 1; j < n ; j++)
if (s[j] != s[i])
s[k++] = s[j];
s[k] = '\0';
}
printf("去掉重复字符后结果为:\n");
puts(s);
}
问:输入字符串,再输入一个字符,将字符串中与输入字符相同的字符删除
- 答:#include
void
delchar(char*
str,
char
c)
{
int
i
=
0,
j
=
0;
while
(str[j]
!=
0)
{
if
(str[j]
!=
c)
{
str[i]
=
str[j];
i++;
}
j++;
}
str[i]
=
0;
}
int
main()
{
char
s[100];
while
(scanf("%s",
s)
!=
eof)
{
delchar(s,
'a');
printf("[%s]\n",
s);
}
return
0;
}
想象两个下标一个i一个j。j一直向前走,如果碰到要剔除的字符就跳过去,但是i不跳过去,如果不是要剔除的字符就复制给i,然后i也前进,这样就把要剔除的字符删掉了。只用遍历一遍,用strcpy发现一个要删除的字符就复制一遍,额外多做了很多无用功。