对字符串处理上遇到个小麻烦。琢磨一阵子了。请教各位啦

光行天下 2013-03-23 11:56:09

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

int main()
{
ifstream in;
in.open("f:\\PhoneBook.txt",ios::in);
if(!in)
{
cout<<"Can't open file!"<<endl;
return -1;
}
char s[30];
string str1;
string str2;
int count = 0;
while(!in.eof())
{

in.getline(s,sizeof(s));
//cout<<s<<endl; //这里输出s = name:w
str1.assign(s,1,3); //我将s中 nme存在str1中,却显示错误 问题在这里 in.getline(s,sizeof(s));
str2.assign(s,7); //这个将s中前7个字符存于str2中
//str2 = s.substr(7,5);
//str2.assign(s,7,11);
cout<<str1<<endl;
cout<<str2<<endl;
count++;
/*这里是小测试
string str3;
char str4[] = "War and Peace";
str3.assign(str4,4,3); //这里却可以将str4中第4个开始数3个的字符and存于str3
cout<<str3<<endl;
*/
}
in.close();
cout<<"号码数共:"<<count<<"个。"<<endl;
return 0;
}



...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tofu_ 2013-03-23
  • 打赏
  • 举报
回复
对于这种格式化的输入,使用c的fscanf比c++的ifstream更便捷,当然,你这里是用c++的,所以这种方式我就不细述了,有兴趣可以查阅一下相关资料。 我copy了你的代码,在mingw和vs2010环境下分别测试,没有任何问题。 你看看是不是文件结尾有多余的空行?或者在in.getline之后加入一行后再试:

if (s[0] == '\0') continue;
光行天下 2013-03-23
  • 打赏
  • 举报
回复
光行天下 2013-03-23
  • 打赏
  • 举报
回复
我在做一个电话本。 PhoneBook.txt中 只有 name:w number:1 我想要将name:后的 w存在一个变量里。 number:后的1 存在一个变量里。方便处理。 count用于计数
光行天下 2013-03-23
  • 打赏
  • 举报
回复
引用 3 楼 tofu_ 的回复:
对于这种格式化的输入,使用c的fscanf比c++的ifstream更便捷,当然,你这里是用c++的,所以这种方式我就不细述了,有兴趣可以查阅一下相关资料。 我copy了你的代码,在mingw和vs2010环境下分别测试,没有任何问题。 你看看是不是文件结尾有多余的空行?或者在in.getline之后加入一行后再试: C/C++ code ? 12 if (s[……
呜呜,就是这个问题,多了个空格...好可恶...

64,637

社区成员

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

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