c - 如何从字符串中删除重复的元音?
问题描述
问题:定义一个 int 函数,从字符串中删除所有连续的元音重复。该函数应返回删除的元音数量并呈现不重复的字符串。
我是 PT 所以 Vogais 是元音;Digite uma String 是写一个字符串。A String sem duplicados fica assim ' %s ' e foram retiradas %d vogais 是 没有重复的字符串是 ' %s ' 并且删除了 %d 个元音。
解释:在葡萄牙语中,我们有一些带有两个连续元音的单词,例如:coordenador、coordenação(chqrlie 示例)。但是在这个问题的背景下,应该忽略这种情况。
问题:当我测试一个像 'ooooo' 这样的字符串时,它说没有重复元音的字符串是 'oo' 并且删除了 3 个元音。但它应该是 'o' 和 4 个元音删除。另一个错误示例是“Estaa e umaa string coom duuuplicadoos”,我正在删除“Esta e uma string com duplcdos”和 8 个元音。
注意:这是一个简单的问题,因此无需复杂化。它只询问连续的重复元音。案例 'oOoO' -> 'oO' ,'abAb'->'abAb','abab' -> 'ab','aba'-> 'aba',... 在另一章 XD 中。
int Vogais(char *s) {
if (*s == 'A' || *s == 'a' || *s == 'E' || *s == 'e'
|| *s == 'I' || *s == 'i' || *s == 'O' || *s == 'o'
|| *s == 'U' || *s == 'u') return 1;
return 0;
}
int retiraVogaisRep(char *s) {
int res = 0;
for (int i = 0; i < strlen(s); i++) {
for (int j = i + 1; s[j] != '\0'; j++) {
if (s[i] == s[j] && Vogais(&s[j]) == 1) {
res++;
for (int k = j; s[k] != '\0'; k++) {
s[k] = s[k + 1];
}
}
}
}
return res;
}
int main() {
char s[38];
printf("Digite uma String:\n");
scanf("%[^\n]", s);
int res = retiraVogaisRep(s);
printf("A String sem duplicados fica assim ' %s ' e foram retiradas %d vogais.\n", s, res);
return 0;
}
解决方案
您的代码太复杂:此任务不需要嵌套循环,并且在缩短字符串时没有设置空终止符。
这是一个更简单的版本:
#include <stdio.h>
#include <string.h>
int retiraVogaisRep(char *s) {
int i, j; // use 2 running indices
char c, last = 0;
for (i = j = 0; (c = s[i]) != '\0'; i++) {
if (c != last || !strchr("aeiouAEIOU", c))
s[j++] = last = c;
}
s[j] = '\0'; // set the null terminator
return i - j; // return the number of bytes removed
}
int main() {
char s[100];
printf("Digite uma String:\n");
// read the user input safely with `fgets()`
if (!fgets(s, sizeof s, stdin))
return 1;
// strip the trailing newline if any
s[strcspn(s, "\n")] = '\0';
// remove duplicate consecutive vowels
int res = retiraVogaisRep(s);
printf("A String sem duplicados fica assim ' %s ' e foram retiradas %d vogais.\n", s, res);
return 0;
}
推荐阅读
- jquery - 防止在同一页面上出现多个 toastr 实例
- css - 带有菜单的标题在 wordpress Node 主题中以响应式心情消失
- excel - 创建新工作表时创建超链接
- c# - 取决于 viewmodel 定义的按钮数量的对话框窗口
- css - Symfony Webpack - 使用子目录中的自定义字体
- webpack - 带有 webpack 的 monorepo(如何在构建中包含资产)
- sql - 需要将以下存储过程从 Oracle 转换为 SQL
- c# - SQL server 的批量上传策略
- entity-framework - 类型 spatial_geometry 未使用命名空间或别名进行限定。只有原始类型可以在没有限定的情况下使用
- sql - oracle db - 如果连接没有结果,则更新表