boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++ 在 windows 上 结果正确, 在 linux 上结果总是不一样,怎
相关主题
how to use cin as default ifstream?
how to skip the last empty lines in ifstream?
What is wrong with the code?
关于文件读取的C++ 问题?
C++读文本文件怎么判断换行?
how to read a sentence into a vector of string?
请教一个C++的问题
Use Visual .NET for C++ programming
三个C syntax 弱问题
这个C++程序为什么不能运行
相关话题的讨论汇总
话题: dict话题: honey话题: comb话题: string话题: int
进入Programming版参与讨论
1 (共1页)
l******o
发帖数: 67
1
写了个word search 的程序。 在 windows上 run的结果是对的,但是把程序和文件 放
到 linux上run的时候结果总是不对。 以为是 line ending 的问题,改了下程序还是
不行。 请教下版内大牛帮着看下, 到底是哪里出问题了。 不胜感激
下面是主函数。word_search(honey_comb,s.c_str()) 这个函数,我感觉写的没问题,
因为在windows上run的结果完全没问题
int main(int argc, char *argv[]){
/////////////////////////////////////////////////////////////////////
// read file
ifstream honey_if;
ifstream dict_if;
string honey_path;
string dict_path;

if(argc>=2){
honey_path=argv[1];
}else{
honey_path="C:\Users\Bo\Desktop\1.txt";
}
if(argc>=3){
dict_path=argv[2];
}else{
dict_path="C:\Users\Bo\Desktop\2.txt";
}
honey_if.open(honey_path.c_str());
dict_if.open(dict_path.c_str());
// store honey comb form in vector hone_comb
string line;
vector honey_comb;
vector dict_words;
int i=0;
while(!honey_if.eof()){
getline(honey_if,line);
if(i==0){
i++;
continue;
}else{
line.erase(line.find_last_not_of(" nrt")+1);
honey_comb.push_back(line);
}
}
//store dict in vector dict_words
while(!dict_if.eof()){
getline(dict_if,line);
line.erase(line.find_last_not_of(" nrt")+1);
dict_words.push_back(line);
}
//check whether a word in dict can be found in honey comb
vector res;
for(int i=int(0);i string s=dict_words[i];

if(word_search(honey_comb,s.c_str())){
res.push_back(s);
}
}
//sort result and output
sort(res.begin(),res.end());
cout< for(int i=int(0);i cout< }
return 0;
}
N******K
发帖数: 10202
2
str 里面有中文?

【在 l******o 的大作中提到】
: 写了个word search 的程序。 在 windows上 run的结果是对的,但是把程序和文件 放
: 到 linux上run的时候结果总是不对。 以为是 line ending 的问题,改了下程序还是
: 不行。 请教下版内大牛帮着看下, 到底是哪里出问题了。 不胜感激
: 下面是主函数。word_search(honey_comb,s.c_str()) 这个函数,我感觉写的没问题,
: 因为在windows上run的结果完全没问题
: int main(int argc, char *argv[]){
: /////////////////////////////////////////////////////////////////////
: // read file
: ifstream honey_if;
: ifstream dict_if;

l******o
发帖数: 67
3
谢谢恢复。
dict_words 里面存的都是 大写的 word, honey_comb 里存的是 是string,每个字母
也是大写的。 我怀疑读取string的时候,linux formatting的哪地方有问题,但是测
试半天找不出来。 感兴趣的话我可以把源代码和数据发给你,麻烦大牛们帮忙测试下
N******K
发帖数: 10202
4
c++ 用的vs?
linux 用的 eclipse?
这两个对源代码里面 string 的编码不一样

【在 l******o 的大作中提到】
: 谢谢恢复。
: dict_words 里面存的都是 大写的 word, honey_comb 里存的是 是string,每个字母
: 也是大写的。 我怀疑读取string的时候,linux formatting的哪地方有问题,但是测
: 试半天找不出来。 感兴趣的话我可以把源代码和数据发给你,麻烦大牛们帮忙测试下
: 。

l******o
发帖数: 67
5
windows 用了 codeblocks, dev c++, 甚至 commandline 用的 g++ 4.7.0直接编译都
试过了,结果一样. linux直接g++ 4.9 编译的。
l******t
发帖数: 55733
6
这种事加点输出很快就解决了啊
N******K
发帖数: 10202
7
我只用过vs 2013 你换上这个试试?
最近的vs 免费了
windows 你用的mgwin64? 这玩意就是个垃圾 程序大了 编译都不通过

【在 l******o 的大作中提到】
: windows 用了 codeblocks, dev c++, 甚至 commandline 用的 g++ 4.7.0直接编译都
: 试过了,结果一样. linux直接g++ 4.9 编译的。

l******o
发帖数: 67
8
试了输出, 完全看不出问题,给出的string 和正确的完全一样。而且deep first
search, 输出量还蛮大。
奇怪的是找一个字母的时候windows能找到,linux 而且里面找不到,但是输出的
string却是一样的。
N******K
发帖数: 10202
9
linux的eclipse等文本编辑器 默认utf8编码
windows里面 vs等文本编辑器 用的是local编码

【在 l******o 的大作中提到】
: 试了输出, 完全看不出问题,给出的string 和正确的完全一样。而且deep first
: search, 输出量还蛮大。
: 奇怪的是找一个字母的时候windows能找到,linux 而且里面找不到,但是输出的
: string却是一样的。

l******o
发帖数: 67
10
是,用的是mgwin64. 但是我用这个给出的结果是正确的啊。 问题是换成linux后出错
了。 这个问题本身很有意思,是在 honey comb 里面找word,四个小时的题。我上星
期写完后感觉不错,测试也都过了。但是今天换到linux就不行了。

【在 N******K 的大作中提到】
: 我只用过vs 2013 你换上这个试试?
: 最近的vs 免费了
: windows 你用的mgwin64? 这玩意就是个垃圾 程序大了 编译都不通过

相关主题
关于文件读取的C++ 问题?
C++读文本文件怎么判断换行?
how to read a sentence into a vector of string?
请教一个C++的问题
进入Programming版参与讨论
l******o
发帖数: 67
11
这个可能是问题。 我来搜搜看解决办法

【在 N******K 的大作中提到】
: linux的eclipse等文本编辑器 默认utf8编码
: windows里面 vs等文本编辑器 用的是local编码

w***x
发帖数: 105
12
“ line.erase(line.find_last_not_of(" nrt")+1); ”
这。。。都不检查下line.find_last_not_of== npos ?另外" nrt"应该是 " \n\r\t" ?
w***x
发帖数: 105
13
说mingw64是垃圾,有何依据?

【在 N******K 的大作中提到】
: 我只用过vs 2013 你换上这个试试?
: 最近的vs 免费了
: windows 你用的mgwin64? 这玩意就是个垃圾 程序大了 编译都不通过

l******o
发帖数: 67
14
sorry,这里用word粘贴的, 好像 word nrt 改成 nrt了。

【在 w***x 的大作中提到】
: “ line.erase(line.find_last_not_of(" nrt")+1); ”
: 这。。。都不检查下line.find_last_not_of== npos ?另外" nrt"应该是 " \n\r\t" ?

t*****n
发帖数: 4908
15
我用mingw没什么问题。milllion级别的代码都可以编译。win下面和linux下面没有区
别。你到stackoverflow去问吧。

【在 w***x 的大作中提到】
: 说mingw64是垃圾,有何依据?
N******K
发帖数: 10202
16
http://stackoverflow.com/questions/16596876/object-file-has-too

【在 t*****n 的大作中提到】
: 我用mingw没什么问题。milllion级别的代码都可以编译。win下面和linux下面没有区
: 别。你到stackoverflow去问吧。

f****4
发帖数: 1359
17
goog line endings linux vs windows
Your implementation depends on line.erase(line.find_last_not_of(" nrt")+1);
which is not portable way

【在 l******o 的大作中提到】
: 写了个word search 的程序。 在 windows上 run的结果是对的,但是把程序和文件 放
: 到 linux上run的时候结果总是不对。 以为是 line ending 的问题,改了下程序还是
: 不行。 请教下版内大牛帮着看下, 到底是哪里出问题了。 不胜感激
: 下面是主函数。word_search(honey_comb,s.c_str()) 这个函数,我感觉写的没问题,
: 因为在windows上run的结果完全没问题
: int main(int argc, char *argv[]){
: /////////////////////////////////////////////////////////////////////
: // read file
: ifstream honey_if;
: ifstream dict_if;

t*****n
发帖数: 4908
18
这个和楼主的问题完全不是一回事。似乎是个vs的编译特例。通常情况是没有大问题。

【在 N******K 的大作中提到】
: http://stackoverflow.com/questions/16596876/object-file-has-too
N******K
发帖数: 10202
19
是mingw 的问题 这个和vs 有啥关系?

【在 t*****n 的大作中提到】
: 这个和楼主的问题完全不是一回事。似乎是个vs的编译特例。通常情况是没有大问题。
w******w
发帖数: 126
20
把代码在linux上重敲一遍。
BTW 你windows的文件路径表示方式跟 linux 不同 也要注意了。
/tmp/bla/bla.txt 这个是linux的标识方法
windows 是 \tmp\bla\bla.txt 你的代码没有太仔细看。 建议你从新敲遍代码在linux
下 然后 g++ 一下你的源代码就好了。 如有问题私聊。
w******w
发帖数: 126
21
不过看了楼主的写的代码,应该是学生写的代码。:)
应该是课堂上的作业的代码吧? :)
w******w
发帖数: 126
22
好吧 , 大约看了一下你的代码,你要干的是这个事情是不是?
你有2个文件:
1 一个待判断含有在一个字典里面能找到的words文件 即你的输入文件
2 你有个dictionary文件,其实就是个refer文件
你要做的就是把输入文件里面的words which in that dictionary 给filter 出来 然
后打印 这个就是你要干的事情吧?
好了 再说说你的代码的写的哪里有需要改进的地方。
1. 代码的命令行输入建议你用 boost 库里面的 有个啥现成的东西来parse 你的命令行
2. 你的代码的performance的问题
你的输入文件读进来都放到一个vector里面 貌似这个vector里面存的东西太多。其
实没有必要,要是我的话,就先把那个dictionary 建好。然后读一行 找一行, 那会
省很多空间。
还有你的dictionary 建议你用 hash table instead of vector。 毕竟hash table的
搜索的时间复杂度是 O(1) 但是如果你用vector 那就是O(n)了。 新标准的C++ 有个
啥 unordered map 好像叫这个名字 就是java里面所谓的hash map。 你可以用这个数
据结构来存你的字典文件。
然后把filter到的result 你再放到vector or map 里面都可以看你自己喜好了!
最后如果你想写的再funcy一点, 就用新标准里面的lambda 搞个functional的
programming 就能更好玩一点。
以上纯属个人建议! 如有不妥请大牛们少拍砖! :)
1 (共1页)
进入Programming版参与讨论
相关主题
这个C++程序为什么不能运行
a question on C++ string
A aimple C++ question
请问C++中局部未使用的变量在优化的时候会去掉么?
C++ 初级再初级问题
A helloworld OpenMP question?
请教C++问题
大侠们救命, C++ operator new 问题
还是咱们这儿,亲。
没有经过构造函数???
相关话题的讨论汇总
话题: dict话题: honey话题: comb话题: string话题: int