如何从功能中返回更改的字符串
How do I return my changed string from my function?
我正在尝试创建一个读取文件并要求单词的程序。然后,它输出文件中使用的次数。
这是正在读取的文件中的内容:
此文件包含许多单词。很多话。好吧,也许毕竟不是很多。那么,有多少?
字出现:
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;
string RemovePunct(string word) {
char exc = '!';
char comma = ',';
char period = '.';
char question = '?';
for (int i = 0; i < word.length(); i++) {
if (word[i] == exc) {
word.pop_back();
}
else if (word[i] == comma) {
word.pop_back();
}
else if (word[i] == period) {
word.pop_back();
}
else if (word[i] == question) {
word.pop_back();
}
}
return word;
}
string ToLowercase(string word) {
transform(word.begin(), word.end(), word.begin(), tolower);
return word;
}
int main() {
string wo;
cin >> wo;
transform(wo.begin(), wo.end(), wo.begin(), tolower);
ifstream in("words.txt");
int wordcount = 0;
string word;
while (in >> word) {
RemovePunct(word);
ToLowercase(word);
cout << word << endl; // used to check if 'word' has changed
if (word == wo) {
++wordcount;
}
}
cout << wordcount << endl;
// outputs 4
// should output 6
}
您可以看到,它不会说明文件中的每个"许多"。我试图使用标点符号并使字符小写以说明每个"许多",但更改的单词并没有返回我的主要功能。因此,我正在寻找可能出错的地方的帮助。
您的代码在其中有一个小问题。您将字符串传递到删除式和可容忍的方法,然后通过参考将字符串传递到删除词,因此您要更改字符串的副本,而不是字符串本身。
您应该更改方法定义如下:
void ToLowercase(string & word) {
和
void RemovePunct(string & word) {
在这里阅读更多有关它的信息
编辑:
由于您现在正在将字符串作为输入/输出变量通过参考传递,因此从该方法返回任何值也没有任何意义,因此返回类型现在无效,您应该从这两个方法中省略return word;
。
您的功能RemovePunct
和ToLowercase
返回修改后的字符串,但您永远不会拿走它。
您可以将循环内的代码更改为
word = RemovePunct(word);
word = ToLowercase(word);
或使功能为:
void RemovePunct (std::string& wo );
和
void ToLowercase (std::string& wo);
然后删除两个函数中的返回语句,如另一个答案所述。
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- std::hash<std::string> 可以为不同的字符串返回相同的值吗?
- Java 调用 dll 字符串返回类型方法
- 返回具有C++字符串返回值的函数的本地 C 字符串
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 尝试以随机字符(长读取)打印字符串返回结果
- 从字符串返回 i(索引)字
- 函数读取最大和min int值,并用文本字符串返回
- 如何将 YAML 节点中的序列作为字符串返回?
- 将注册表项读取为字符串返回数值
- 为什么我在尝试打印字符串返回时收到编译器错误?
- 使用 char*array 存储条形图的条形图,以便我可以动态制作它并作为字符串返回
- 字符串返回功能不起作用 - 'identifier is underfined'
- 将C 本地字符串返回到另一个功能
- 在MATLAB中仅接受INT32PTR时,将错误编号作为字符串返回
- 字符串流到字符串返回
- 字符串返回错误的长度
- 从共享指针矢量字符串返回值
- C++随机字符串返回意外结果
- 临时标准::字符串返回垃圾