×

string 网页模板 网页制作

网页模板(网页制作模板的网站)

访客 访客 发表于2022-05-05 12:32:00 浏览693 评论4

4人参与发表评论

如有以下模板文本(其中用一对标记{{}}标识用于查找和替换的文本):

<!DOc++TYPE html><html><head><title>User {{name}}</title></head><body><h3>{{name}}</h3><p>Email:<ahref="mailto:{{email}}">{{email}}</a></p><p>Address:{{address}}</p></body></html>

对标记{{var}}内的文本按其内的标识名var批量处理。

用于查找、替换的文本:

name "wwu"email "wwuhn@163.com"

要处理为:

<!DOCTYPE html><html><head><title>User wwu</title></head><body><h3>wwu</h3><p>Email:<ahref="mailto:wwuhn@163.com">wwuhn@163.com</a></p><p>Address:</p></body></html>

编程思路:

目标文本用vector<string>content存放。

替换文本用map<string,string>findReplace存放。

然后扫描content,查找形如{{var}}的字符串,将其用findReplace[var]替换。

字符串的查找替换使用string类的成员函数find()和replace()完成。

#include <iostream>#include <vector>#include <string>#include <map>using namespace std;vector<string> content; // 包括需要替换内容的文本(需要替换的内容用{{}}标识关键字)map<string,string> findReplace; // 需要替换的关键字和目标替换内容int textLines,keys; // 目标处理文本和用于替换的文本的行数void trans(){ // 网页转换 for(int i=0; i<textLines; i++) // 逐行处理 { int pos=0,pos1,pos2; do{ pos1=content[i].find("{{",pos); pos2=content[i].find("}}",pos1); if(pos1>=0 && pos2>=0){ // 找到 {{ }} string var = content[i].substr(pos1+2,pos2-pos1-2); if(findReplace.count(var)){ // 提取形如 {{var}}的内容 string result=findReplace[var].substr(2,findReplace[var].length()-3); content[i].replace(pos1,var.length()+4,result); } else content[i].replace(pos1,var.length()+4,""); pos = pos1+var.length(); } else // 没有打到{{ }},pos指向当前字符串末尾 pos = content[i].length(); }while(pos<content[i].length()); }}int main(){ int i=1; string line; cin>>textLines>>keys; cin.ignore(); // 屏蔽回车键 for(i=0;i<textLines;i++){ getline(cin,line); content.push_back(line); }for(i=0;i<keys;i++){ getline(cin,line); int pos = line.find(" "); findReplace.insert(map<string,string>::value_type(line.substr(0,pos),line.substr(pos))); } trans(); for(i=0;i<textLines;i++) cout<<content[i]<<endl; restart: goto restart; return 0;}/*12 2<!DOCTYPE html><html><head><title>User {{name}}</title></head><body><h3>{{name}}</h3><p>Email:<ahref="mailto:{{email}}">{{email}}</a></p><p>Address:{{address}}</p></body></html>name "wwu"email "wwuhn@163.com"*/

测试时,可直接复制粘贴以上备注内容。

适当改写,模板文本可以放到文本文件,再读取到content中。

当然,也可用到图形界面的文本处理中。

res:

李春葆 李筱《直击招聘 程序员面试笔记 算法设计深度解析》

-End-

群贤毕至

访客
语酌绾痞 语酌绾痞2022-05-27 21:39:17 | 回复 place; // 需要替换的关键字和目标替换内容int textLines,keys; // 目标处理文本和用于替换的文本的行数void trans(){ /
离鸢谜兔 离鸢谜兔2022-05-27 19:33:59 | 回复 <textLines;i++) cout<<content[i]<<endl; restart: goto restart; return 0;}/*12 2<!DOCTYPE html>&l
野欢皆叹 野欢皆叹2022-05-28 00:15:08 | 回复 // 目标处理文本和用于替换的文本的行数void trans(){ // 网页转换 for(int i=0; i<textLines; i++) // 逐行处理 { int
假欢寂星 假欢寂星2022-05-27 20:24:30 | 回复 ine.substr(pos))); } trans(); for(i=0;i<textLines;i++) cout<<content