【发布时间】:2019-03-29 06:08:06
【问题描述】:
我目前在更改字符串内容时遇到了一些问题。
我正在编写的以下程序重新排列字符串 src 中以辅音开头的单词,使得辅音在后面结束(bob --> obb)。以元音开头的单词保持不变。结果被插入到字符串dest中。
然而,句子输入的最后一个词总是以一个缺失的辅音结尾(bob --> ob)。这表明我无法更改字符串 dest 的最后一个索引的内容。
有什么原因吗?
void convert(char src[], char dest[]) {
int i, isVowel, first_pos;
int len = strlen(src);
int count = 0;
char first = 0;
for (i = 0; i < len; i++) {
while (!isspace(src[i])) {
if (first == 0) {
first = src[i];
first_pos = i;
}
isVowel = first == 'a' || first == 'e' || first == 'i' || first == 'o' || first == 'u';
if (isVowel == 1) {
dest[count++] = src[i];
}
else if (i != first_pos) {
dest[count++] = src[i];
}
i++;
}
if (isVowel == 0) {
dest[count++] = first;
}
dest[count++] = ' ';
first = 0;
}
}
输入:“大家好” 预期输出:“ih uysg” 实际输出:“ih uys”
【问题讨论】:
-
一些观察:1)
for (i = 0; i <= len; i++)可能应该是for (i = 0; i < len; i++)2)isWovel在第一个字符是空格时未初始化使用 -
我认为您遇到的问题比描述的要多。使用“开始”和“从这里开始”等输入尝试您的程序。你需要重新考虑你的算法。
-
您希望“从这里开始”的输出是什么?是“astrt eehr”还是...?
-
应该是“蛋挞”
-
所以它只是第一个你想要移动到词尾的辅音字符,对吧?