50分求助C++中的汉字字符对比

huangyinvhai 2007-05-07 08:31:55
我有一个文件
里面一个汉字然后后面跟一个数字
比如:
兵1
龙2
隆3
然后我把这个文件读到程序里,存在一个字符数组str1里。
接着我有一个汉字字符串str2,"兵龙"
我想把这个字符串的汉字一一与原来的对比找到对应的数字,
比如这个字符串我想得到13。
比较的部分,在循环里if(str2[i]==str1[j]) str2[i]改成str1[j+1];
但是结果是没有,也就是说我这样比较没有任何相等的情况发生。
于是我把str2改成一个汉字字符cha '兵'
然后比较部分,在循环里if(cha==str1[j]) cha=str1[j];
结果可以输出1,但是会同时输出3。
请高手指教,


或者提供一个能实现汉字对比的方法。
...全文
445 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-05-08
  • 打赏
  • 举报
回复
于是我把str2改成一个汉字字符cha '兵'
然后比较部分,在循环里if(cha==str1[j]) cha=str1[j];
结果可以输出1,但是会同时输出3。

if(cha==str1[j])
==》
if(strncmp(cha, str1, 2) == 0)
jixingzhong 2007-05-08
  • 打赏
  • 举报
回复
函数名称: strncmp
函数原型: int strncmp(char *str1,char *str2,int count)
函数功能: 对str1和str2中的前count个字符按字典顺序比较
函数返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2
参数说明: str1,str2-待比较的字符串,count-比较的长度
所属文件: <string.h>

#include <string.h>
#include <stdio.h>
int main()
{
int ptr;
char *buf1="aaabbb",*buf2="bbbccc",*buf3="ccc";
ptr=strncmp(buf2,buf1,3);
if (ptr>0)
printf("buffer 2 is greater than buffer 1");
else
printf("buffer 2 is less than buffer 1");
ptr=strncmp(buf2,buf3,3);
if (ptr>0)
printf("buffer 2 is greater than buffer 3");
else
printf("buffer 2 is less than buffer 3");
return(0);
}
jixingzhong 2007-05-08
  • 打赏
  • 举报
回复
if(str2[i]==str1[j])
==》
if(strncmp(str2, str1, 2) == 0) //比较第一个汉字, 它是两个字节的!
jixingzhong 2007-05-08
  • 打赏
  • 举报
回复
一个汉字然后后面跟一个数字
比如:
兵1
龙2
隆3

把这个读取到一个 map 中
changy 2007-05-08
  • 打赏
  • 举报
回复
依次比较两字节即可
char str1[4]="兵1",str2[5]="兵龙";
char chNum;
if(str1[0]==str2[0]&&str1[1]==str2[1])
chNum=str1[2];

dsniff 2007-05-07
  • 打赏
  • 举报
回复
晕哈,大家回帖都挺快的啊,下面的代码是C++ Primer上 的一个文本转换的列子,自己该下map就可以 用了
#include "stdafx.h"
#include <map>
#include <string>
#include <iostream.h>
#include <fstream>
#include <sstream>
using namespace std;

ifstream& open_file(ifstream &in,const string &file)
{
in.close();
in.clear();
in.open(file.c_str());
return in;
}
int main(int argc, char** argv)
{

argv[1]="map_file.txt";
argv[2]="input.txt";
map<string,string> trans_map;
string key,value;
if(argc!=3)
throw runtime_error("wrong number of arguments");
ifstream map_file;
if(!open_file(map_file,argv[1]))
throw runtime_error("no transformation file!");
while(map_file>>key>>value)
trans_map.insert(make_pair(key,value));
ifstream input;
if(!open_file(input,argv[2]))
throw runtime_error("no input file!");
string line;
while(getline(input,line))
{
istringstream stream(line);
string word;
bool firstword = true;
while(stream>>word)
{
map<string,string>::const_iterator map_it=trans_map.find(word);
if(map_it!=trans_map.end())
word=map_it->second;
if(firstword)
firstword= false;
else
cout<<" ";
cout<<word;
}
cout<<endl;
}
return 0;
}
dsniff 2007-05-07
  • 打赏
  • 举报
回复
文件A中汉字和数字有没有分隔符啊?
可以将汉字和数字分别存入map容器中,从文件B中读取字符,在map中匹配之后得出数字
  • 打赏
  • 举报
回复
用map做个表
将 汉字做key 后面的数字做val
然后就直接查表得到val
jianshi051 2007-05-07
  • 打赏
  • 举报
回复
一个汉字占用2个字节的空间,于是你以前的方法都不行,要用宽字符型wchar_t代替char类型进行操作,这样才可以使用你的第一种方法:
“比较的部分,在循环里if(str2[i]==str1[j]) str2[i]改成str1[j+1];”

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧