避免在C++中从文件中读取标点符号
创始人
2024-12-17 01:31:17
0

在C++中处理文件读取时,读取标点符号可能会造成一些问题,例如在单词中被错误解析为单独的字符。因此,最好将标点符号视为单独的标记,并且在读取文件时将它们与单词分开处理。

代码示例:

#include
#include
#include
#include

using namespace std;

vector split(string s, char delim)
{
    vector tokens;
    string token;
    size_t start = 0, end = 0;
    while ((end = s.find(delim, start)) != string::npos)
    {
        token = s.substr(start, end - start);
        if (!token.empty())
            tokens.push_back(token);
        start = end + 1;
    }
    token = s.substr(start);
    if (!token.empty())
        tokens.push_back(token);
    return tokens;
}

int main()
{
    ifstream inFile("input.txt");
    if (!inFile)
    {
        cerr << "Unable to open file input.txt";
        exit(1);
    }

    vector words;
    string line;
    while (getline(inFile, line))
    {
        vector tokens = split(line, ' ');
        for (int i = 0; i < tokens.size(); i++)
        {
            string word = tokens[i];
            if (word.back() == '.' || word.back() == ',' || word.back() == ';')
            {
                words.push_back(word.substr(0, word.length() - 1));
                words.push_back(word.substr(word.length() - 1));
            }
            else
            {
                words.push_back(word);
            }
        }
    }

    for (int i = 0; i < words.size(); i++)
    {
        cout << words[i] << " ";
    }
    cout << endl;
    return 0;
}

在这个例子中,我们使用了一个名为split的函数,这个函数将字符串拆分成一个单词的向量。我们在读取每一行时使用这个函数,将每

相关内容

热门资讯

Android Recycle... 要在Android RecyclerView中实现滑动卡片效果,可以按照以下步骤进行操作:首先,在项...
安装apache-beam==... 出现此错误可能是因为用户的Python版本太低,而apache-beam==2.34.0需要更高的P...
Android - 无法确定任... 这个错误通常发生在Android项目中,表示编译Debug版本的Java代码时出现了依赖关系问题。下...
Android - NDK 预... 在Android NDK的构建过程中,LOCAL_SRC_FILES只能包含一个项目。如果需要在ND...
Akka生成Actor问题 在Akka框架中,可以使用ActorSystem对象生成Actor。但是,当我们在Actor类中尝试...
Agora-RTC-React... 出现这个错误原因是因为在 React 组件中使用,import AgoraRTC from “ago...
Alertmanager在pr... 首先,在Prometheus配置文件中,确保Alertmanager URL已正确配置。例如:ale...
Aksnginxdomainb... 在AKS集群中,可以使用Nginx代理服务器实现根据域名进行路由。以下是具体步骤:部署Nginx i...
避免在粘贴双引号时向VS 20... 在粘贴双引号时向VS 2022添加反斜杠的问题通常是由于编辑器的自动转义功能引起的。为了避免这个问题...
AddSingleton在.N... 在C#中创建Singleton对象通常是通过私有构造函数和静态属性来实现,例如:public cla...