使用map完成文本内的单词转换

本文探讨了在Change()函数中如何巧妙地利用getline()和istringstream处理文本输入,逐个将字符串转换为单词。同时讲解了Buildmap()中转换规则的设定,以及在处理缓冲区时要注意的细节,如跳过开头的n个字符(包括空格)以确保正确读取后续内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>  
#include<fstream>
#include<string> 
#include<sstream>
#include<vector>   
#include<map>
using namespace std;
map<string, string> Buildmap(istream& file) {
 map<string, string>map1;
 string key,value;
 while (file >> key && getline(file, value))
  if (value.size() > 1)
   map1[key] = value.substr(1);
 return map1;}
const string& transform(const string& s,const map<string, string>& m) {
 auto it = m.find(s);
 if (it != m.end())
  return it->second;
 else
  return s;
}
void Change(ifstream& input, ifstream& rule,ofstream&n) {
 map<string,string>map1=Buildmap(rule);
 string text;
 while (getline(input, text)) {
  istringstream stream(text);
  string word;
  while (stream >> word) {
   n << transform(word, map1) << ends;
  } 
  n<< endl; }}
int main() {
 ifstream infile("1.txt");
 ifstream rule("2.txt");
 ofstream out("3.txt");
 Change(infile, rule,out);
 return 0;
}
  • Change()中巧妙的地方
    本例中Change()中对于流输入的很巧妙,先getline()获得一行的输入,然后使用istringstream 将这一行一个个string元素进行处理。
  • Buildmap() 中处理转换的规则
while (file >> key && getline(file, value))
  if (value.size() > 1)
   map1[key] = value.substr(1);

这里要正确理解缓冲区的工作原理,在file>>key时缓冲区的第一个元素已经被传递了给key,之后getline()所获取的元素为第一个元素之后的所有元素
substr(n)的作用是跳过开头的n个字符(包括空格)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值