如何访问字符指针数组中的字符,谢谢

addcplus 2005-08-06 02:10:14
在程序中我定义指针的指针和指针数组:

char ** tempZkkStrings;

char * FakeZkkStrings[] = {
"从文献计量学、科学计量学到科学技术计量学——关于科学技术计量学的概念及其研究内容#罗式胜#图书馆论坛#2003#23#6#8825490&",
"从文献计量学的角度看《临床检验杂志》的质量#周金元#临床检验杂志#2002#30#4#6576845&",
"从文献评价计量指标分析高校学报的学术影响力#尤力群#中国科技期刊研究#2002#13#4#6592399&",
"从文献信息管理学角度谈农业文摘期刊的改革与创新#颜蕴#农业图书情报学刊#2003##4#8076754&",
"从文献资源建设到信息资源建设#高波#中国图书馆学报#2000#26#5#4780394&",
"大学扩招后高校图书馆如何深化改革#许仁兰#图书馆论坛#2001#21#2#5119467&",
"大学生的信息素质与高校图书馆的读者教育#林翊#柳州师专学报#2003#18#3#8004680&",
"大学生课外阅读研究#曹培根#山东图书馆季刊#2002##3#6848243&",
"大学生利用电子多功能阅览室的心理需求及对策#徐斌#大庆高等专科学校学报#2001#21#2#5234528&",
"大学生利用多媒体阅览室的心理及对策#吴春玉#科技文献信息管理#2001#15#2#5200286&"
};
tempZkkStrings = FakeZkkStrings;

请问如何访问到每个字符串中的#号,而且我想截取前面的第一个#前面的字符串,应该怎么做呢?
...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
doway 2005-08-06
  • 打赏
  • 举报
回复
TO:zqz_joshua(正在学习网络编程的老男孩)

C++ 我只是初学,语法基本知道,库基本不知道。C 还没认真学过呢。

早上刚刚下了个 Cygwin,又刚好看到这问题,想用 C 写一下,却写不出来。后来只好在 VC 里写了。

晚上这不又东查西查了半天,下边这个东西在 Cygwin 下用 gcc 编译通过了。

#include <stdio.h>
#include <string.h>

main()
{
char *sz[] = {
"从文献资源建设到信息资源建设#高波#中国图书馆学报#2000#26#5#4780394&",
"大学扩招后高校图书馆如何深化改革#许仁兰#图书馆论坛#2001#21#2#5119467&",
"大学生的信息素质与高校图书馆的读者教育#林翊#柳州师专学报#2003#18#3#8004680&",
"大学生课外阅读研究#曹培根#山东图书馆季刊#2002##3#6848243&",
"大学生利用多媒体阅览室的心理及对策#吴春玉#科技文献信息管理#2001#15#2#5200286&"
};

int i;
for (i = 0; i < sizeof(sz)/sizeof(sz[0]); i++)
{
char *psz;
int pos = strchr(sz[i], '#') - sz[i];
psz = (char*)malloc(pos + 1);
strncpy(psz, sz[i], pos);
psz[pos] = '\0';
printf("%s\n", psz);
free(psz);
}
}

doway 2005-08-06
  • 打赏
  • 举报
回复
倒!回错地方了。:(
doway 2005-08-06
  • 打赏
  • 举报
回复
String 和 Integer 是 java.lang 包中定义的两个类。
byte 和 int 中 Java 的基本类型,前者 8 位,后者 32 位。

str 是个 String 类型,Integer.decode(str) 得到一个 Integer 类型。intValue 是 Integer 类型的一个方法,返回 Integer 类型的对象中包含的 int 值。最后 (byte) 是一个强制类型转换,将 32 位的 int 强制转换为 8 位,可能丢失数据。

zqz_joshua 2005-08-06
  • 打赏
  • 举报
回复
TO 回复人: doway(john) ( ) 信誉:100 :
1)come from man:
"size_t strcspn(const char *s, const char *reject);

The strcspn() function calculates the length of the initial segment of s which consists entirely of characters not in reject."

here,the function will also calculate the characters behind the 1st "#",I think;

2)I wanna konw new() /delete () come from Lib??
I only konw malloc,free in C

3)why call a shell command: system("pause") here?

btw:rewrite:

q=p;
for(; strcmp("#", q) == 0; q++ )
{
memcpy(text,q,q-p);
printf(""the follow is: %s",text);
break; //!! I forget!!!
}

addcplus 2005-08-06
  • 打赏
  • 举报
回复
doway(john)的回答很精彩,只是差了一个语句:psz[pos+1]='\0';
zqz_joshua(正在学习网络编程的老男孩)的思路也有启发性。
谢谢大家!
doway 2005-08-06
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string>

int main()
{
char *sz[] = {
"从文献计量学、科学计量学到科学技术计量学——关于科学技术计量学的概念及其研究内容#罗式胜#图书馆论坛#2003#23#6#8825490&",
"从文献计量学的角度看《临床检验杂志》的质量#周金元#临床检验杂志#2002#30#4#6576845&",
"从文献评价计量指标分析高校学报的学术影响力#尤力群#中国科技期刊研究#2002#13#4#6592399&",
"从文献信息管理学角度谈农业文摘期刊的改革与创新#颜蕴#农业图书情报学刊#2003##4#8076754&",
"从文献资源建设到信息资源建设#高波#中国图书馆学报#2000#26#5#4780394&",
"大学扩招后高校图书馆如何深化改革#许仁兰#图书馆论坛#2001#21#2#5119467&",
"大学生的信息素质与高校图书馆的读者教育#林翊#柳州师专学报#2003#18#3#8004680&",
"大学生课外阅读研究#曹培根#山东图书馆季刊#2002##3#6848243&",
"大学生利用电子多功能阅览室的心理需求及对策#徐斌#大庆高等专科学校学报#2001#21#2#5234528&",
"大学生利用多媒体阅览室的心理及对策#吴春玉#科技文献信息管理#2001#15#2#5200286&"
};

for (int i = 0; i < sizeof(sz)/sizeof(sz[0]); i++)
{
char *psz;
size_t pos = strcspn(sz[i], "#");
psz = new char[pos + 1];
strncpy(psz, sz[i], pos);
printf("%s\n", psz);
delete psz;
}

system("pause");
return 0;
}
copygirl 2005-08-06
  • 打赏
  • 举报
回复
定义一个数组,里面放的是指向字符串的指针。
char **a[3]={"11111","22222","33333"};
printf("%s\n",a[1]);/*打印出22222,因为a[1]里存放的是第二个字符串的地址*/
由此可看出a[1][0]就是第二个串中的第一个字符,a[1][1]就是第二个串中的第二个字符
可以实现楼主想要的操作。
zqz_joshua 2005-08-06
  • 打赏
  • 举报
回复
pls have a try:
#define NUM (sizeof()/sizeof(FakeZkkStrings[0]))

char **p=NULL;
char *q=NULL;
char text[...];
text[0] = '\0';
....
for(p=FakeZkkStrings; p < FakeZkkStrings+NUM; p++)
{
q=p;
for(; strcmp("#", q) == 0; q++ )
{
memcpy(text,q,q-p);
printf(""the follow is: %s",text);
}
//for strong
if(!q)
break;
text[0] = '\0';
}



I also don not konw the correct answer,pls try
addcplus 2005-08-06
  • 打赏
  • 举报
回复
我本来就是这么定义的啊,但是总是出现
比如:*(*tempZkkStrings+11)='\0'
就会出现访问冲突错误,一定是访问的方法不对。
各位有经验的大侠指点一二,谢谢
wyq1986ada 2005-08-06
  • 打赏
  • 举报
回复
是有点难!!
你可以用指向指针的指针啊!!



70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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