计算空格以获得字数

时间:2018-02-17 19:48:15

标签: c++

我有一个家庭作业,我必须根据空格的数量返回字符串中的单词数。这是我的代码,我不确定它有什么问题,但是当我尝试编译时,我不断收到错误消息。

string getWordCount(string sentence){
    int count = 1;
    for(int i = 1; i < sentence.length(); i++){
        if (s[i]==' '){
            count++;
        }
    }
    return count;
}

错误消息是:

error: ‘s’ was not declared in this scope
     if (s[i]==' '){
         ^
error: could not convert ‘count’ from ‘int’ to ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
     return count;
            ^~~~~

4 个答案:

答案 0 :(得分:3)

要编译代码,必须确保返回类型(countint)与函数的声明返回类型兼容(您说它将返回string) 。所以而不是:

string getWordCount(string sentence)

将您的函数声明为:

int  getWordCount(string sentence)

另请注意,您使用s[i],但未声明s。你的意思可能是sentence[i]

还考虑解决注释中提到的不同算法错误(即空字符串的错误结果,对于只有空白的字符串,并且取决于练习narative,对于在两个单词之间使用多个连续空格的字符串)完成你的作业并提高你的技能。

答案 1 :(得分:0)

您传入的是一个名为sentence的变量,但是在名为s的变量上进行解析。此外,count是一个int,但您的返回类型是字符串。试试这个:

int getWordCount (string sentence)
{
  int count = 1;
  for (int i = 0; i < sentence.length (); i++)
    {
      if (sentence[i] == ' ')
        count++;
    }
  return count;
}

答案 2 :(得分:0)

他们说了什么。

Plus ...避免使用方括号进行索引。使用基于范围的for循环。注意琐碎的输入(在这种情况下,没有单词,甚至是空字符串)。不要假设空格只是空格,或者它只包含一个字符。函数不修改的输入参数可以声明为const-reference,以避免产生不需要的副本。使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>执行常见任务。

SPOILER ALERT 。完成作业后,请不要再阅读。

#include <algorithm>

Bonus(和更好)解决方案。以下内容不使用状态变量(#include <cctype> #include <string> int get_word_count(const std::string &sentence) { int count = 0; bool scanning_a_word = false; for (auto ch : sentence) { if (!std::isspace(ch)) { if (!scanning_a_word) { count += 1; scanning_a_word = true; } } else { scanning_a_word = false; } } return count; } )。我称这种代码为#34;面包屑编程&#34;。你沿着小径留下面包屑,以显示你去过的地方。有时鸟儿会吃面包屑。看马云,没有面包屑!

scanning_a_word

答案 3 :(得分:-1)

通常,当未在范围内声明变量时,您在本地内部定义了一个变量,并且在该代码块(即for循环)完成执行后它不存在。或者,您还没有声明变量。

#include<iostream>
using namespace std;

int main()
{
    cout.precision(2);
    // Define Constant and Variables
    const char POUND = 163;
    int pounds = 0;
    int shillings = 0;
    int pence = 0;
    double newPounds;

    // Keyboard out and in

    cout << "Enter amount of old pounds:";
    cin >> pounds;
    cout << "Enter amount of old shillings:";
    cin >> shillings;
    cout << "Enter amount of old pence:";
    cin >> pence;

    // Math to convert old to new

    newPounds = pounds + (shillings % 20) + (pence % 240);

    //Final output

    cout << "The value of the new currency is" << newPounds;

    return 0;
}

假设你试图遍历传入的参数,这是一个名为sentence的字符串,我要么将变量名称更改为参数的s,要么将字符串复制到另一个名为s的字符串中,或​​者将s更改为句子循环。不同的变化如下所示:

error: ‘s’ was not declared in this scope
     if (s[i]==' '){
     ^

对于第二个错误,通常在将变量类型转换为其他类型时出现此错误。在您的情况下,发生以下错误是因为您声明函数将返回一个字符串,但是,您尝试返回一个int。

       // change parameter name to s
       string getWordCount(string s)
      {
        int count = 1;
        for(int i = 1; i < sentence.length(); i++)
        {
            if (s[i]==' ')
                count++;
        }
        return count;
      }

      // change s to sentence inside the loop
      string getWordCount(string sentence)
      {
        int count = 1;
        for(int i = 1; i < sentence.length(); i++)
        {
            if (sentence[i]==' ')
                count++;
        }
        return count;
     }
  // create a string s, and copy sentence into string s
  string getWordCount(string sentence)
  {
    int count = 1;
    string s = strcpy(s, sentence);
    for(int i = 1; i < sentence.length(); i++)
    {
        if (s[i]==' ')
            count++;
    }
    return count;
 }

要修复此错误,只需将返回类型更改为int。但是,如果您确实希望由于某种原因将计数作为字符串返回,请在返回之前将整数转换为字符串。两种变化如下所示。

error: could not convert ‘count’ from ‘int’ to ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
     return count;
            ^~~~~

请注意:这只描述了编译错误发生的原因以及解决方法,以便您可以继续完成作业。这并没有在逻辑上用你的代码描述错误。