如何在与特定字符串进行比较后过滤缓冲区中的行

时间:2016-03-17 16:33:44

标签: c

我试图仅过滤来自给定缓冲区(1200行)的那些行,其第一个令牌与特定字符串匹配。这里的行中的字符串用" @"分隔。符号和行由" \ n"。

分隔

因此,首先我使用strtok()分割字符串并将标记存储在指针数组中。 然后我用了比较

if(token[0]=="abc.com") print("%s",token[i])

这里只打印所有以abc.com开头的行,只有第一个令牌。

那么,任何人都可以帮助我在匹配第一个令牌后如何打印原始行。

int len_of_buff; 
int n; 
//char tokens[1024]; 
int ret_code = 1; 
n=0;
len_of_buff = strlen((char *)my_buffer);
//char *tokens[len_of_buff]; 
for(i=n;i<len_of_buff; i++) { 
    char tokens[1024]; 
    tokens[i] = strtok ((char *)my_buffer,"@\n"); 
//if (my_buffer[i] == '\n') my_buffer[i]='\0';     
ret_code=strcmp(tokens[0], "abc.com"); 
if (ret_code==0) {
printf("\n"); 
fprintf(stdout, "%s \n ",(char *)my_buffer+n); 
// fprintf(stdout, "******The buffer is: %d bytes\n",len_of_buff); 
n = i+1; 
break; } }

2 个答案:

答案 0 :(得分:1)

if(token[0]=="abc.com")

简单地比较两个指针(一个指向常量字符串,另一个指向输入行中的某个位置。这将总是返回FALSE。

if (strcmp (token[0], "abc.com") == 0)

如果token [0]是指向第一个令牌的char指针,那么会做正确的事。

如果要打印整个原始行,则需要将其保存到某处 - strtok在解析过程中销毁原始字符串。

答案 1 :(得分:0)

现在我按照以下方式做了它并且工作正常。

char buffer_copy[1000];
strcpy( buffer_copy, buffer );
char * tokens[1000];
size_t token_count = 0;
char * ptr = tokens[token_count] = buffer_copy;
while( *ptr )
    if( ( *ptr == '@' ) || ( *ptr == '\n' ) )
        *ptr++ = '\0', tokens[++token_count] = ptr;
    else
        ++ptr;

size_t index;
for( index = 0; index < token_count; ++index )
     if( !strcmp( tokens[index], "member" ) )
         printf( "%d: %s  | %s", index, tokens[index], buffer );