我有一个家庭作业,我必须根据空格的数量返回字符串中的单词数。这是我的代码,我不确定它有什么问题,但是当我尝试编译时,我不断收到错误消息。
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;
^~~~~
答案 0 :(得分:3)
要编译代码,必须确保返回类型(count
是int
)与函数的声明返回类型兼容(您说它将返回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;
^~~~~
请注意:这只描述了编译错误发生的原因以及解决方法,以便您可以继续完成作业。这并没有在逻辑上用你的代码描述错误。