c - C程序删除字符串中所有重复的字符
问题描述
我想从字符串中删除所有重复的字符。例如,如果我有:
“阿普鲁”
我希望结果是
阿普罗
但它显示
阿普鲁
我的错误是什么?我是初学者 请原谅我的错误
#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
if 语句中使用的子表达式str[i] != '\n'
存在,因为该函数fgets
可以将换行符附加到输入的字符串。所以这个子表达式用于从结果字符串中排除换行符。或者你可以在循环之前删除这个字符。
推荐阅读
- javascript - 如何在数组上重构 .filter 方法以便传递过滤所需的另一个变量?
- java - Spring:i18n MessageSource 不适用于某些语言环境
- python - 创建虚拟环境时如何自动安装pygame?
- git - Jenkins - 代理的 Git 连接问题?
- php - 在 Visual Studio Code 中创建 PHP 代码片段
- c# - VBE 加载项 - 如何执行“全部保存”
- javascript - 无法读取 null 的属性进行破坏
- mysql - 如果我的计数行为 0,则查询不返回任何结果
- ios - 基于兄弟一对多关系属性的所有对象的CoreData NSFetchedResultsController
- python - python3类参数错误