[问题] 字串分开实作

楼主: wtchen (没有存在感的人)   2015-06-12 16:53:22
问题(Question):
正在想一个实作问题:如何将一个长的字串char*按照分隔符号(\t)分成几个char*
举例:某文字档有长字串如下:
Number (\t) First Name (\t) Last Name (\t) Points (\t) Flavor (\n)
1 (\t) Eve (\t) Jackson (\t) 94 (\t) 3.45 (\n)
2 (\t) John (\t) Doe (\t) 80 (\t) 9.21 (\n)
3 (\t) Adam (\t) Johnson (\t) 67 (\t) 4.80 (\n)
4 (\t) Jill (\t) Smith (\t) 50 (\t) 2.22 (\n)
然后我设两个pointer, char *line 跟 char **t(sizeof(char*)*MAXITEM)
我用fgets(line,SIZE,fp);把字串一行一行加载line后,把\t跟换成\0,
再把line的\0位置address转给t
以第1行为例:
t[0] = line, t[0] = (char*)malloc(6-0+1) -> *t[0] = "Number\0" ?
t[1] = line+7, t[1] = (char*)malloc(17-7+1) -> *t[1] = "First Name\0" ?
t[2] = line+18, t[2] = (char*)malloc(27-18+1) -> *t[2] = "Last Name\0" ?
t[3] = line+28, t[3] = (char*)malloc(34-28+1) -> *t[3] = "Point\0" ?
t[4] = line+35, t[4] = (char*)malloc(41-35+1) -> *t[4] = "Flavor\n" ?
用这种方法加载第2行,第3行后,我就能用atoi或atof把某些t[i]转成数字。
但是我不太懂要怎么把**t跟*line设在同一address上
还有程式跑完我要free的话,两个adress重叠会不会出问题?
还是板友有更好的方法可以建议?
我是希望能尽可能用效率高的方法(而且是用C的语法)
希望各位能理解我想做的东西。
谢谢
作者: Feis (永远睡不着 @@)   2015-06-12 17:11:00
不知道你想干嘛,把\t换\0后生个指标阵列指一指就好
作者: fireslayer (fireslayer)   2015-06-12 17:13:00
你是不是在找 Strtok?
楼主: wtchen (没有存在感的人)   2015-06-12 17:22:00
strtok我知道,可是那不是我想要的还是遇到atoi遇到\0会自动停下来?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-06-12 18:05:00
你知道atoi()的参数是C String吗
作者: bibo9901 (function(){})()   2015-06-12 18:17:00
你要的看起来就是strtok啊
作者: lj0113 (tiny legend)   2015-06-12 20:38:00
2F说的对, newPtr = strtok( s1, " \n" );s1会被strtok拿去弄, 所以不可以宣告为constant string
作者: arthur104 (arthur)   2015-06-12 22:03:00
free(t[i])会出事吧

Links booklink

Contact Us: admin [ a t ] ucptt.com