我想从字符串中删除所有重复的字符。例如,如果我有:
“ aapuroo”
我希望结果是
麻烦
但它显示
紫杉
我在这里有什么错误?我是一个初学者,请原谅我的错误
#include <stdio.h>
#include<string.h>
int main()
{
char str[100];
int i,j,k,n;
gets(str);
n = strlen(str);
for(i=0; i<n; i++)
{
for(j=i+1; j<n;j++)
{
if(str[i] == str[j])
{
str[j] = str[j+1];
}
}
}
puts(str);
return 0;
}
该方法无效。考虑一个像这样的字符串char str[] = "111";
。
所以在这些循环中
for(i=0; i<n; i++)
{
for(j=i+1; j<n;j++)
{
if(str[i] == str[j])
{
str[j] = str[j+1];
}
}
}
str[0]
等于tp '1'
。str[1]
也等于'1'
。因此str[1]
被替换str[2]
也等于tp '1'
。结果,您将获得数组包含字符串"11"
而且,内部循环不仅处理字符串中相邻的重复字符,还处理所有重复的字符。
请注意,该功能gets
是不安全的功能,C标准不再支持该功能。改用标准功能fgets
。
该程序可以如下所示
#include <stdio.h>
int main()
{
enum { N = 100 };
char str[N];
fgets( str, N, stdin );
for ( size_t i = 0, j = 0; str[i] != '\0'; )
{
if ( str[++i] != str[j] && str[i] != '\n' )
{
if ( i != ++j ) str[j] = str[i];
}
}
puts( str );
return 0;
}
如果输入字符串,"aapuroo"
则程序输出为
apuro
str[i] != '\n'
存在if语句中使用的子表达式,因为该函数fgets
可以将换行符附加到输入的字符串中。因此,此子表达式用于从结果字符串中排除换行符。或者您可以在循环之前删除此字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句