请教C++如何连接字符串,谢谢啊

mysummer2013 2012-12-02 01:42:59
char *tokenPtr;

str="aaa,vvv,444,666";

如下,怎样把每一个strtok分割后的子串以最快的速度连接成一个新的字符串呢?谢谢
tokenPtr=strtok(str,",");
while(tokenPtr!=NULL)
{
tokenPtr=strtok(NULL,",");
}
...全文
1845 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
mysummer2013 2012-12-03
  • 打赏
  • 举报
回复
引用 31 楼 MoreWindows 的回复:
"有可能会的,但是必须是连续的 "," 三个字符才算分隔符" 那就试试strstr吧, pos1 = strstr(strLine, "\",\""); 引用 24 楼 mysummer2013 的回复: 引用 23 楼 derekrose 的回复: 引用 19 楼 mysummer2013 的回复: 引用 18 楼 derekrose 的回复:引用 14 楼 mysummer201……
谢谢,我都不知道怎么移动指针 字符串,每行内容,只能扫描一遍,
MoreWindows 2012-12-03
  • 打赏
  • 举报
回复
"有可能会的,但是必须是连续的 "," 三个字符才算分隔符" 那就试试strstr吧, pos1 = strstr(strLine, "\",\"");
引用 24 楼 mysummer2013 的回复:
引用 23 楼 derekrose 的回复: 引用 19 楼 mysummer2013 的回复: 引用 18 楼 derekrose 的回复:引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."……
  • 打赏
  • 举报
回复
顶一个 回答的很详细啊
txzsp 2012-12-03
  • 打赏
  • 举报
回复
strcat()
Binzo 2012-12-02
  • 打赏
  • 举报
回复
sprintf, strcat
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
引用 25 楼 derekrose 的回复:
引用 24 楼 mysummer2013 的回复: 引用 23 楼 derekrose 的回复:引用 19 楼 mysummer2013 的回复: 引用 18 楼 derekrose 的回复:引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS"……
大致是这个意思,伪代码如下: 首先某个字段是否合法,确切说是 每行有2个字段是否合法 如果合法,那么第一列作为hash的KEY,第N,M,P 等部分列拼接在一起作为HAS的VALUE(有些列不要,扔掉) 如果第1列在HASH里不存在,那么INSERT到HASH 如果第1列在HASH里已经存在KEY了,那么HASH的VALUE=VALUE+当前行的N+M+P (N和N和P之间用 ` 分隔 最后文件读完后,把HASH的内容打印到文本文件 我初学C++,还写不出来,求助各位老师,谢谢啊
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
补充一下,如果出现这样的数据 "KKK",",","32432" 就别管了,不管是strtok还是指针移动的做法,就当错了好了,无需考虑 真实业务不可能会这样的 但是 "KKK","4,8","32432" 可能有可能。 希望性能越快越好文件有1.2G,1000万行
derekrose 2012-12-02
  • 打赏
  • 举报
回复
引用 24 楼 mysummer2013 的回复:
引用 23 楼 derekrose 的回复:引用 19 楼 mysummer2013 的回复: 引用 18 楼 derekrose 的回复:引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","",……
对这个字符串进行操作我的想法是这样的 首先肯定要判断是不是有用的,即某字段是否符合要求,那么这个可以抽象成一个方法isValid(); 如果true,那么执行哈希的工作,哈希的工作也是要找到某字段的string值,而且判断是否合法也需要找某一个字段的值,那么我们再抽象一个方法findNthField(),那么你需要传入的参数有 1.该字符串 2.长度 3.一个数字就是你要找的目标,那么既然你对那个null这么不放心的话,我们就不用什么内置的函数,我们自己写这个函数就ok了,每当遇到","的时候你传入的第三个参数就需要减一,那么很快就找到某一个字段的值。说的还可以吧,不知道你听懂了没
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
引用 23 楼 derekrose 的回复:
引用 19 楼 mysummer2013 的回复: 引用 18 楼 derekrose 的回复:引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."F33" "A444FD","","FDF",……
有可能会的,但是必须是连续的 "," 三个字符才算分隔符 我的读文本文件的代码是这样的,希望保存按照我上面说的规则保存倒hash,最后还要从HASH快速打印倒文件 我初学C++,请各位老师帮忙写写,我也学习一下 #include "stdio.h" #include "string.h" #include "iostream" #include "fstream" #include "windows.h" #include <string> #include <iostream> #include<unordered_map> using namespace std; void ReadFileWithGetLine() { char *tokenPtr; ifstream ReadFile; char line[160]; unordered_map<string,string> my; ReadFile.open("test.txt",ios::in); ReadFile.getline(line,160); while(!ReadFile.eof()) { ReadFile.getline(line,160); } ReadFile.close(); } int main(void) { DWORD start,stop; start = GetTickCount(); ReadFileWithGetLine(); stop = GetTickCount(); printf("time: %lld ms\n", stop - start); return 0; }
derekrose 2012-12-02
  • 打赏
  • 举报
回复
引用 19 楼 mysummer2013 的回复:
引用 18 楼 derekrose 的回复:引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."F33" "A444FD","","FDF","是"."F33" 然……
在机器里面null就是0,但是你这里字段不是0啊 是完全没有啊,完全没有不可以叫null吧。ps我的理解 看了你的描述,我还有一个问题,双引号里面会不会出现逗号
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
还是这个例子。每行8个字段,第1个字段当作KEY,假设VALUE是拼结字段2和7,拼结的字段用`分隔 "AFD","5345DD","FDF","是","FS","HH","UUU","QVVQQ" "A444FD","R","FDF","否","","YY","PPP","3QQQ" "A444FD","R","FDF","是","","UU","45","666QQQ" "A444FD","T","FDF","是","F33","UU","888","666QQQ" 哈希的最终结果是如下内容 KEY VALUES AFD 5345DD`UUU A444FD R`45`T`888 <-这里含有两行的内容
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
引用 20 楼 MoreWindows 的回复:
不要用strtok呀,逗号边上还在",只要改动下指针位置就可以了。 用strchr查找这一行第一个逗号 pos1 = strchr(strLine, ','); 再用strrchr查找这一行最后一个逗号。 pos2 = strrchr(strLine, ','); 再 *pos1 - 1 = '\0'; strcpy(strNewLine, strLine + 1); strc……
诶,可能没理解我的意思,分隔符不是逗号,逗号靠不住的 分隔符是3个字符",",是CSV文件 每行大概10个字段, 如果第N个字段的值是 "是“或者”“YES”等 那么把第一个字段作为HASH的KEY,第2,3,8,9等部分字段拼接在一起,作为HASH的VALUE 如果KEY已经在HASH存在,那么value=当前VALUE+字段2+3+8+9 举例如下 KEY VALUE 123 MMBB11 如果当前行的第一个字段是 123,且字段 2+3+8+9是 "HGR888" 那么HASH的KEY是123的VALU值改成 MMBB11HGR888 如果123在HASH里不存在,那么INSERT 123 HGR888
MoreWindows 2012-12-02
  • 打赏
  • 举报
回复
不要用strtok呀,逗号边上还在",只要改动下指针位置就可以了。 用strchr查找这一行第一个逗号 pos1 = strchr(strLine, ','); 再用strrchr查找这一行最后一个逗号。 pos2 = strrchr(strLine, ','); 再 *pos1 - 1 = '\0'; strcpy(strNewLine, strLine + 1); strcat(strNewLine, pos2 + 2)
引用 19 楼 mysummer2013 的回复:
引用 18 楼 derekrose 的回复: 引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."F33" "A444FD","","FDF","是"."F33" 然后如果第4个字段为"否……
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
引用 18 楼 derekrose 的回复:
引用 14 楼 mysummer2013 的回复: 我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."F33" "A444FD","","FDF","是"."F33" 然后如果第4个字段为"否”整行不要 第4列如果为"是",那么挑出第1个……
谢谢,写错了,不是句号 分隔符是: "," 三个字符,双引号逗号双引号 数据举例如下,任何一个字段都可能是NULL,比如第2行的第2个字段 "AFD","5345DD","FDF","是","FS","HH","UUU","QVVQQ" "A444FD","","FDF","否","F33","YY","PPP","3QQQ" "A444FD","","FDF","是","F33","UU","45","666QQQ" 我的代码是这样的,可是如下代码我不会知道哪个字段是NULL while(!ReadFile.eof()) { ReadFile.getline(line,160); tokenPtr=strtok(line,"\",\""); while(tokenPtr!=NULL) { tokenPtr=strtok(NULL,"\",\""); } }
derekrose 2012-12-02
  • 打赏
  • 举报
回复
引用 14 楼 mysummer2013 的回复:
我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."F33" "A444FD","","FDF","是"."F33" 然后如果第4个字段为"否”整行不要 第4列如果为"是",那么挑出第1个字段和第5个字段拼接成新的字……
有一个地方很奇怪诶,为什么第四个字段和第五个字段用句话分割 那这样的话很容易了,从后找第一个逗号,然后找到之后看他后面那个是不是“是”,如果是对这一行执行操作,操作大家都给你了,如果不是那么就下一行直到最后
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
谢谢你,我只是举个例子,正确的是到数第5个字段。是否是“是”
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
引用 15 楼 MoreWindows 的回复:
每次读一行,数逗号判断第四个字段。如果为“是”, 用strchr查找这一行第一个逗号 pos1 = strchr(strLine, ','); 再用strrchr查找这一行最后一个逗号。 pos2 = strrchr(strLine, ','); 再 *pos1 = '\0'; strcpy(strNewLine, strLine); strcat(strNewLine, pos2……
谢谢,不少逗号,是 "\",\"" 有3个字符,也就是 CSVM逗号分隔,双引号包含
MoreWindows 2012-12-02
  • 打赏
  • 举报
回复
每次读一行,数逗号判断第四个字段。如果为“是”, 用strchr查找这一行第一个逗号 pos1 = strchr(strLine, ','); 再用strrchr查找这一行最后一个逗号。 pos2 = strrchr(strLine, ','); 再 *pos1 = '\0'; strcpy(strNewLine, strLine); strcat(strNewLine, pos2 + 1); 将strNewLine输出到文件即可.
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
我再说清楚点吧 文本文件如下,假设5个字段,有可能有NULL字段(双引号内为NULL) "AFD","5345DD","FDF","是"."FS" "A444FD","","FDF","否"."F33" "A444FD","","FDF","是"."F33" 然后如果第4个字段为"否”整行不要 第4列如果为"是",那么挑出第1个字段和第5个字段拼接成新的字符串打印到新的文本文件, 文本文件有大约1.2G,1000万行 先谢谢了,读文本文件
mysummer2013 2012-12-02
  • 打赏
  • 举报
回复
引用 12 楼 oniisama 的回复:
if(strcmp(tokenPtr,"\"\"")==0)
谢谢 报错诶:弹出“调试”,“发送错误报告”,“不发送”的那个window报错窗口
加载更多回复(11)

64,637

社区成员

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

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