如何从功能中返回更改的字符串

How do I return my changed string from my function?

本文关键字:字符串 返回 功能      更新时间:2023-10-16

我正在尝试创建一个读取文件并要求单词的程序。然后,它输出文件中使用的次数。

这是正在读取的文件中的内容:

此文件包含许多单词。很多话。好吧,也许毕竟不是很多。那么,有多少?

字出现:

#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;

您的功能RemovePunctToLowercase返回修改后的字符串,但您永远不会拿走它。

您可以将循环内的代码更改为

word = RemovePunct(word);
word = ToLowercase(word);

或使功能为:

void RemovePunct (std::string& wo );

void ToLowercase (std::string& wo);

然后删除两个函数中的返回语句,如另一个答案所述。