- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数,应该在给定这些约束的情况下计算文件中的音节数:
1) 每一组相邻的元音(a、e、i、o、u、y)算作一个音节(例如,“real”中的“ea”算作一个音节,但“e..”) “regal”中的“a”算作两个音节
2) 单词末尾的“e”不算音节
3)每个单词至少有一个音节,即使前面的规则给出的计数为零。
鉴于此,我制作了(尽管非常糟糕)函数来计算文件中的音节数
我尝试以多种不同的方式创建这个函数,但这种方式对我来说最有意义,并且也给了我对真实答案的合理(不是真的,而是在它所做的宏伟计划中)估计。
int syllableCount(char **str)
{
int i = 0;
int q = 0;
int syllableCounter = 0;
for (i = 0; i < lineCount; i++)
{
for (q = 0; q <= strlen(str[i]); q++)
{
if (str[i][q] == 'A' || str[i][q] == 'a' ||
str[i][q] == 'E' || str[i][q] == 'e' ||
str[i][q] == 'I' || str[i][q] == 'i' ||
str[i][q] == 'O' || str[i][q] == 'o' ||
str[i][q] == 'U' || str[i][q] == 'u' ||
str[i][q] == 'Y' || str[i][q] == 'y')
{
syllableCounter++;
}
if ((str[i][q] == 'E' && str[i][q + 1] == ' ') ||
(str[i][q] == 'e' && str[i][q + 1] == ' ') ||
(str[i][q] == 'E' && str[i][q + 1] == '\n') ||
(str[i][q] == 'e' && str[i][q + 1] == '\n') ||
(str[i][q] == 'E' && str[i][q + 1] == '.') ||
(str[i][q] == 'e' && str[i][q + 1] == '.') ||
(str[i][q] == 'E' && str[i][q + 1] == ';') ||
(str[i][q] == 'e' && str[i][q + 1] == ';') ||
(str[i][q] == 'E' && str[i][q + 1] == ':') ||
(str[i][q] == 'e' && str[i][q + 1] == ':') ||
(str[i][q] == 'E' && str[i][q + 1] == '!') ||
(str[i][q] == 'e' && str[i][q + 1] == '!') ||
(str[i][q] == 'E' && str[i][q + 1] == '?') ||
(str[i][q] == 'e' && str[i][q + 1] == '?'))
{
syllableCounter--;
}
if ((str[i][q] == 'A' || str[i][q] == 'a' ||
str[i][q] == 'E' || str[i][q] == 'e' ||
str[i][q] == 'I' || str[i][q] == 'i' ||
str[i][q] == 'O' || str[i][q] == 'o' ||
str[i][q] == 'U' || str[i][q] == 'u' ||
str[i][q] == 'Y' || str[i][q] == 'y') &&
(str[i][q + 1] == 'A' || str[i][q + 1] == 'a' ||
str[i][q + 1] == 'E' || str[i][q + 1] == 'e' ||
str[i][q + 1] == 'I' || str[i][q + 1] == 'i' ||
str[i][q + 1] == 'O' || str[i][q + 1] == 'o' ||
str[i][q + 1] == 'U' || str[i][q + 1] == 'u' ||
str[i][q + 1] == 'Y' || str[i][q + 1] == 'y'))
{
syllableCounter--;
}
if ((str[i][q] != 'A' || str[i][q] != 'a' ||
str[i][q] != 'E' || str[i][q] != 'e' ||
str[i][q] != 'I' || str[i][q] != 'i' ||
str[i][q] != 'O' || str[i][q] != 'o' ||
str[i][q] != 'U' || str[i][q] != 'u' ||
str[i][q] != 'Y' || str[i][q] != 'y') &&
(str[i][q + 1] == ' ' || str[i][q + 1] == '\n'))
{
syllableCounter++;
}
}
}
return syllableCounter;
}
在我的测试文件中,我得到了 54 个音节,而真正的答案是 32。是什么导致我落后 22!?
P.S:这是我使用的文件中的文本:
“这件红色成衣就是为你量身定做的!它明天就准备好了。什么是衣服的颜色?哦,它是红色的!”
所有拼写和空格错误都是故意造成的
最佳答案
你的代码太复杂了。
原始问题陈述中的规则非常简单。对于每个单词,您需要计算遇到的不同元音组的数量。评论中使用状态机的建议是绝对正确的。但是,您不需要复杂的机器。您只需要跟踪一些基本状态。
至少,我建议这些状态:
int in_word = 0; // non-zero if currently processing a word
int in_vowels = 0; // non-zero if currently processing group of vowels
int is_silent_e = 0; // non-zero if the last vowel processed was an 'e'
int vowel_groups = 0; // counts the number of vowel groups encountered in current word
现在,有了上面的合理状态,下面是如何使用它们的概述:
for (char *p = str[i], *end = p + strlen(str[i]) + 1; p != end; ++p)
{
char c = tolower(*p);
if (isalpha(c))
{
// starting a new word?
if (!in_word) {
in_word = 1;
in_vowels = 0;
is_silent_e = 0;
vowel_groups = 0;
}
// do we have a vowel?
if (strchr("aeiouy", c)) {
if (!in_vowels) {
/**** WRITE ME ****/
++vowel_groups;
} else {
/**** WRITE ME ****/
}
} else if (in_vowels) {
// no longer in vowel group
/**** WRITE ME ****/
}
}
else if (in_word)
{
// No longer in a word -- update syllable count and reset
vowel_groups -= is_silent_e;
/**** WRITE ME ****/
}
}
我留下了一些逻辑供您填写。当您正确执行此操作时,您将获得示例输入的答案 32
。
请注意特殊的循环条件,该条件确保循环也处理字符串的空终止符。这将确保即使字符串中的最后一个字符是单词字符,单词结尾测试也会运行。
关于c - 计算文件中音节数的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660474/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!