C ++将字符串与字符串

时间:2017-11-13 09:33:24

标签: c++ c++11 c++14

我试图循环一个单词,但只有元音因某种原因而起作用。另一种类型打印出总数量的单词。请原谅我用瑞典语和英语混合的单词。

#include <iostream>

using namespace std;

int main()
{
    int vo = 0;
    int ko = 0;

    char vocals[7]
    {
        'A','O','U','E','I','Y'
    };


    char konsonanter[19]
    {
        'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','X','Z'
    };

    string word = "Toysoldier";

    for(int i = 0; i < word.length(); i++)
    {
        for(int v = 0; v < vocals[v]; v++)
        {
            if(vocals[v] == word[i])
                vo++;
        }

        for(int k = 0; k < konsonanter[k]; k++)
        {
            if(konsonanter[k] == word[i])
                ko++;
        }
    }


    cout << "Konsonanter = " << ko << " Vokaler = " << vo << endl;
}

4 个答案:

答案 0 :(得分:3)

你的循环条件错了。 您可能打算v < vocals[v]而不是v < 7,因为您的数组中有7个人声。

v < vocals[v]不是错误,因为v初始化为零,而表达式vocals[v]char,它也可用于数组下标('A'翻译为65,'E'翻译为69,依此类推。)

辅音循环中存在同样的问题。

答案 1 :(得分:1)

您有多个错误,因此我只是按顺序查看所有代码。

如果你写

char vocals[7] = {'A' ... 'Y'};

你必须手动保持数组大小和初始化程序同步 - 例如,你错过了一个(你有7&#34; vocals&#34;在7元素阵列的初始化程序中)。

写错误的可能性较小

char vowels[] = {'A', 'E', 'I', 'O', 'U'};

让编译器为你计算。 (我把它重命名为&#34;元音&#34;因为那是他们用英语打电话的,然后删除了&#39; Y&#39;因为它不是一个 - 显然你可以坚持使用瑞典语。)

同样,这个循环是错误的:

for(int v = 0; v < vocals[v]; v++)

因为您将v(数组中的索引)与vocals[v](一个字符值)进行比较。它们是两种不同类型的东西,比较在这里没有意义。数组上的循环通常会被写入

for (int v = 0; v < sizeof(vocals)/sizeof(vocals[0]); ++v)

因此对于某些N元素数组,索引v的范围从0到N-1。一种更简单的方法就是编写

for (auto v : vocals)

其中v现在是一个字符,在循环体中逐个获取每个声音/元音的值。编译器可以为您计算出数组大小。

我老老实实地以这种方式重写你的所有循环:除非你做更复杂的事情,否则你不需要手动管理数组索引和界限。

除了循环条件错误之外,你的角色比较无论如何都会失败:元音/声音和辅音数组都只包含大写字母,而你的字符串大多是小写的。您需要对此进行管理,例如使用

#include <cctype>

// ...
for (auto c : word) {
  for (auto v : vowels) {
    if (v == std::toupper(c)) {

答案 2 :(得分:0)

您的错误出现在“for”循环中使用的测试中: v < vocals[v]会将整数v与字符vocals[v]的整数值进行比较,该字符恰好是该字符的ASCII代码(实际上,这将是65到90之间,查找“ Ascii表“在网上”。

要修复代码,您应该像这样修改“for”循环:

for (char vocal : vocals) {
  if (word[i] == vocal) vo++;
}
for (char konsonant : konsonanter) {
  if (word[i] == vocal) ko++;
}

另外,请注意你的“vocals”数组中的人声数量是错误的:它是6,而不是7。

答案 3 :(得分:0)

你在循环中的条件是有缺陷的,你应该使用&#39; for(int v = 0; v&lt; sizeof(vocals); v ++)`。

另外,检查你的声音和辅音的条件:如果你考虑小写字符怎么办? 'a' != 'A',因此您无法正确计算它们。 提示:使用toupper()tolower(),这样您就不需要过多的字符列表。