这个项目的功能主要是:过滤掉文件中的文件编号和金额大小。因为那个是一个中外合资的企业,需要处理的大部分是英文的。
功能是:在文本中找到特征字符串(文件编号前都有一个特征字符串,例如:File:321223344),然后将其文件编号取消掉,换成XXXXXXX。没有特征的话,当然是不作处理。
这就是getneedreplacestring和stringreplace函数了。就是我调试来调试去都出错的函数。功能基本是包括在几个DLL中,上一位同事是用C++写的,现在需要修改一些功能,没办法,学C++拉,结果灰头土脸的。我的思路都写在我的几个帖子上了,不知道是不是错得太多没有信心了。老是胆战心惊。请问大家还有没有什么好的方法和效率更高的方法?
功能是:在文本中找到特征字符串(文件编号前都有一个特征字符串,例如:File:321223344),然后将其文件编号取消掉,换成XXXXXXX。没有特征的话,当然是不作处理。
这就是getneedreplacestring和stringreplace函数了。就是我调试来调试去都出错的函数。功能基本是包括在几个DLL中,上一位同事是用C++写的,现在需要修改一些功能,没办法,学C++拉,结果灰头土脸的。我的思路都写在我的几个帖子上了,不知道是不是错得太多没有信心了。老是胆战心惊。请问大家还有没有什么好的方法和效率更高的方法?
解决方案 »
- 用makefile生成exe文件时怎么加入debug信息
- 当扩大绘制直方图的x轴大小时,会出现空白的地方,扩大的越大,空白越多,最终成孤立的直线,如何解决?
- 0040读取clob的问题..
- 老问题:如何在图标与桌面间运行程序
- 如何控制光标在控件中移动的次数?
- 高手请进:如何在程序中把英文菜单字体换成中文的?
- 请教PROCESS_INFOMATION 这个数据结构应该包含那个头文件
- 为什么散了那么多分,还有这么多分,痛苦中,再散分
- ==高手请进:MFC Odbc读取保存在MS Sql 2000表中的JPEG文件时出现内存不足???====
- 通用软件创业,诚邀深圳或辽宁的VC++程序员顶尖高手,具有深厚的通用软件系统分析和设计,有团队精神和创业雄心
- 求电子书下载,100分一本!!!
- 我现在作的“打开文件对话框”一次打开三五个文件还可以,但是一次打开几十个就出问题,要修改哪个参数?
#include <stdlib.h>
#include <string.h>#define BOOL int
#define TRUE 1
#define FALSE 0
BOOL IsWhite(char cChar)
{
return cChar==' ' || cChar=='\t' || cChar=='\r' || cChar=='\n';
}BOOL IsDelimeter(char cChar)
{
return cChar==',' || cChar=='.';
}//~ Find the substring, change the characters immediately followed
//~ by the substring into specified characters until a white space
//~ reached.BOOL ReplaceString(char* szText,char* szSubStr,char cFill)
{
if(!szText || !szSubStr)
return FALSE;
while(char* ptr=strstr(szText,szSubStr))
{
ptr+=strlen(szSubStr);
while(*ptr && IsWhite(*ptr))
ptr++; while(*ptr && (!IsWhite(*ptr)) && (!IsDelimeter(*ptr)))
{
*ptr=cFill;
ptr++;
} szText=ptr;
} return TRUE;
}void main()
{
char* szText=" this is the test file:111111, i do not known what's going on, file: 22222,this is stop.";
char cChar='X'; char* ptr=new char[strlen(szText)+1];
strcpy(ptr,szText);
ReplaceString(ptr,"file:",cChar); printf("%s\n",ptr);
delete []ptr;
}
(本程序未经测试,使用者后果自负,作者保留所有版权)
to szqzy:
Athlonxpx86是对的,我这种水平用CString不用一个小时也可以完成,对楼上的各位大侠来说更加是简单容易。
{
string out = str;
if(!charlist.empty()) //缺省操作
{
int len1 = charlist.size();
int len2 = charReplace.size();
size_t beginPos = 0, endPos;
endPos = out.find(charlist, beginPos);
while(endPos != size_t(-1))
{
out.replace(endPos, len1, charReplace);
beginPos = endPos + len2;
endPos = out.find(charlist, beginPos);
}
}
return out;
}string _replace(const string &str, const string &charlist, const string &charReplace)
{
return _replace(str.c_str(), charlist, charReplace);
}
#include <string>
#include <cassert>
#include <cstring>
using namespace std;void getneedreplacestring(const char* source, const char* pattern, string& dest)
{
assert(source != NULL && pattern != NULL); int source_length = strlen(source);
int pattern_length = strlen(pattern); const int REP_LENGTH = 6;
const char REP_CHAR = 'X'; if (source_length <= 0 || pattern_length <= 0)
return; bool has_matched = false;
char ch;
for (int i = 0, j = 0; i < source_length; )
{
ch = source[i];
if (has_matched)
{
if (isdigit(ch))
{
// if 'ch' is digital character, increment 'i'
++i;
}
else
{
// for non-digital character, move on for next matching(keep 'i' unchanged)
has_matched = false;
j = 0; // reset 'j' for next matching
}
}
else if (j < pattern_length)
{
// check for pattern
if (ch == pattern[j])
{
++j;
}
else
{
if (j > 0)
j = 0;
}
dest += ch; // append 'ch' to dest
++i;
}
else
{
// match successfully, append "XXXXXX" to dest
has_matched = true;
dest.append(REP_LENGTH, REP_CHAR);
}
}
}