// strtok.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *SkipChars(char *buf, const char charToSkip)
{
char *p = buf;
while (p && (*p) && (*p == charToSkip)) p++;
return p;
}
char *SkipString(char *buf, const char *str)
{
char *p;
p = strstr(buf, str);
if (p) {
p += strlen(str);
}
return p;
}
char *GetToken(char *buf, char *tok, int toksize)
{
char *start;
int i = 0;
start = SkipChars(buf, ' ');
while (start && (*start != 0) && (*start != ' ') && (i < toksize)) {
tok[i++] = *start;
start++;
}
tok[i] = 0;
return start;
}
int ParseLine(char *buf, char delim, char **toks, int tokSize, int n)
{
char *start, *item;
int i = 0;
if ((!buf) || (!toks)) return NULL;
start = SkipChars(buf, delim);
if (*start==0) return NULL;
while (start && (*start) && (i<n)) {
/* convert to first-major pointer */
item = ((char *)&toks[0] + tokSize*i);
start = GetToken(start, (char *)item, tokSize);
i++;
}
return i;
}
char *GetStringVal(char *buf, char *key, char *val, int valSize)
{
char *p = SkipString(buf, key);
if (p) {
p = GetToken(p, val, valSize);
}
return val;
}
const char desc[] = "This is just an example for skipstring function";
char res[] = "Mac Type Interface\n"
"1111.2222.3333 S fe0/0\n"
"aabc.ddef.8754 S fe0/0\n"
"553a.4455.6789 D fe0/1\n"
"Total Macs 0\n";
char set[] = "mac-learning alarm 90 clear 60";
#define TOKEN_LEN 80
int _tmain(int argc, _TCHAR* argv[])
{
int i,balance,len;
char *p, *q, **pp;
char token[100];
char tokens[3][TOKEN_LEN] = {"saya", "makan", "nasi"};
#if 0
/* Program entry point */
if (argc) {
for( i=0; i<argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
p = SkipChars(argv[i], ' ');
p = SkipChars(p, '"');
while (p) {
if (balance) balance=0;
end = SkipChars(p, '"');
if (end) {
balance = 1;
len = end-p;
strncpy(token, p, len);
token[len] = 0;
printf("token=%s\n", token);
p = end;
printf("p = %s\n", p);
}
if ((!balance) || (!len))
break;
}
}
}
printf("original string: %s\n", desc);
p = SkipString((char*)&desc[0], "an example for ");
if (p) {
printf("After SkipString: %s\n", p);
}
#endif
p = SkipString((char *)res, "Interface\n");
if (p) {
p = strtok(p, "\n");
//printf("original p=%s\n", p);
while (p) {
if (strstr(p, "Total Mac")) break;
printf("\n\n--------------------------------------\n");
printf("address of tokens[0][0] = %X\n", &tokens[0][0]);
//printf("q = %X\n", q);
len = ParseLine(p, ' ', (char **)&tokens, TOKEN_LEN, 3);
for(i=0; i<len; i++) {
printf("token%d = %s\n", i+1, tokens[i]);
}
printf("%s\n", p);
printf("--------------------------------------\n");
p = strtok(NULL, "\n");
}
}
printf("alarm=%s\n", GetStringVal(set, "alarm", token, sizeof(token)));
printf("clear=%s\n", GetStringVal(set, "clear", token, sizeof(token)));
return 0;
}
No comments:
Post a Comment