C++的fstream如何实现字符串的分割并保存进不同的字符数组中

nabasasun 2013-10-06 02:39:16
分离出每行的字符串,空格是分隔符。
并分析该行哪部分是字符串哪部分是数字,那部分是字母
比如(下面是一行中3个都有)

abcd 123 我是谁
......
...



要把abcd保存进字母的字符数组中
把123保存进数字的数组中
把我是谁,保存进另外1个字符数组中
...全文
320 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NginxL 2013-10-10
  • 打赏
  • 举报
回复
bool space(char c)
{
     return isspace(c);
     }

bool non_space(char c)
{
     return !isspace(c);
     }

vector<string> split(const string& str)
{
               typedef string::const_iterator iter;
               vector<string> ret;
               iter i=str.begin();
               while(i!=str.end())
               {
                    i=find_if(i,str.end(),non_space);
                    iter j=find_if(i,str.end(),space);
                    if(i!=str.end())
                    ret.push_back(string(i,j));
                    i=j;                                   
                                   }
               return ret;
               }
直接先用一个字符串向量保存所有结果,然后遍历字符串向量
赵4老师 2013-10-10
  • 打赏
  • 举报
回复
C++相比C,不擅长干这种活。
nabasasun 2013-10-10
  • 打赏
  • 举报
回复
都说了不要用C的方法,而是string 类
nabasasun 2013-10-09
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
fgets sscanf
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
sscanf在游戏中也可以使用吗?
赵4老师 2013-10-08
  • 打赏
  • 举报
回复
fgets sscanf
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
nabasasun 2013-10-08
  • 打赏
  • 举报
回复
fstream 和string 混合开发的比较好,前者读取,后者分析
max_min_ 2013-10-06
  • 打赏
  • 举报
回复
strtok函数,就是这个功能的库函数啊 分隔符为' '; 参考里面的strtok函数用法 http://blog.csdn.net/max_min_go/article/details/9292101
九桔猫 2013-10-06
  • 打赏
  • 举报
回复
根据数字和字母的ASCII判断 。。。。。

64,654

社区成员

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

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