【发布时间】:2015-01-28 17:40:54
【问题描述】:
目前我正在开发一个程序,该程序允许用户输入一个字符串,然后将其标记化,然后使用指针数组将标记打印到屏幕上。 “应该”通过调用我的 tokenize 函数来执行此操作,该函数读取输入字符串直到第一个分隔符(''、'、'、'.'、'?'、'!')。然后它将我的字符串中的分隔符更改为 NULL 字符。然后它应该返回一个指向我的字符串中下一个字符的指针。 在输入字符串后的 main 中,它应该继续调用 tokenize 函数,该函数返回指针,然后将指针存储在指针数组中,以便稍后打印我的标记。一旦 tokenize() 返回指向字符串末尾的 NULL 字符的指针,它就会从该循环中中断。然后我使用我的指针数组打印出标记。 //尽量详细
#include <stdio.h>
#include <string.h>
char *tokenize ( char *text, const char *separators );
int main ( void )
{
char text[30];
char separators[6] = { ' ','.',',','?','!','\0'};
char *pch = NULL;
int tokens[15];
int i = 0;
int j = 0;
printf("Enter a string: \n");
fgets( text, 30, stdin );
printf("%s", text );
pch = tokenize ( text, separators );
do
{
pch = tokenize ( pch, separators );
//printf("%c", *pch);
tokens[i] = pch;
i++;
}
while( *pch != NULL );
i--;
while( j != i )
{
printf("%s", tokens[i] );
j++;
}
return 0;
}
char *tokenize ( char *text, const char *separators )
{
while( text != NULL )
{
if( text != NULL )
{
while( separators != NULL )
{
if( text == separators )
{
text = '\0';
}
separators++;
}
}
text++;
}
return text;
}
目前已知的三大问题。 1.当我编译时,它读取字符串然后打印它,然后卡在一个没有打印的无限循环中,仍然试图获取输入。 2. 我很确定我在错误的地方使用“*”作为我的指针。 3. 我的函数传入了对我的数组的引用,所以我假设我可以按原样递增它们。
感谢任何反馈!我会一直看这个帖子。如果我留下了不清楚的地方,我可以重新指定。谢谢。
【问题讨论】:
-
您是否尝试重新实现
strtok? -
请看一下strspn()和strcspn()
-
pch = tokenize ( text, separators );第一个参数必须更新。 -
我查看了 strtok,这正是我正在做的事情,除了我目前使用的功能之外,我没有任何 libray 功能。 @BLUEPIXY(哦,废话,我不敢相信我错过了),另一个真正令人担忧的问题是当我做
tokens[i] = pch;时。我在存储指针吗? -
tokenize返回相同的结果,因为tokenize总是接收相同的参数。例如char *p = text;..tokenize(&p, separators);p由tokenize更新。tokenize可以继续处理。
标签: c string pointers tokenize pointer-arithmetic