#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_32 32
void removeEOL(char *s){
char *newline
= strchr( s
, '\n' ); if ( newline )
*newline = 0;
}
char *strtok_r(char *str, const char *delims, char **store);//strtok_r is not included in c99
void tokenizer2D(char *s, const char *delimiter, int ncols, int maxStrSize, char rowVec[ncols][maxStrSize]){
char *saveptr;
char *token = strtok_r(s, delimiter, &saveptr);
int j = 0;
while (token && j < ncols){
token = strtok_r(NULL, delimiter, &saveptr);
}
}
void read2mat(const char delim[], int nrows, int ncols, int maxStrSize, char mat[nrows][ncols][maxStrSize]){
char linea[maxStrSize];
int i = 0;
while (fgets(linea
, maxStrSize
, stdin
) && i
< nrows
){ removeEOL(linea);
tokenizer2D(linea, delim, ncols, maxStrSize, mat[i++]);
}
}
int main(void){
int N = 3, M = 5;
char (*A
)[M
][BUF_32
] = malloc(sizeof(char[N
][M
][BUF_32
]));
read2mat(", ", N, M, BUF_32, A);
for(int r = 0; r < N; ++r){
for(int c = 0; c < M; ++c){
}
}
return 0;
}
//Because strtok_r is not included in c99
char *strtok_r(char *str, const char *delims, char **store){
char *p, *wk;
if(str != NULL){
*store = str;
}
if(*store == NULL) return NULL;
*store
+= strspn(*store
, delims
);//skip delimiter if(**store == '\0') return NULL;
if(p != NULL){
*p='\0';
*store = p + 1;
} else {
*store = NULL;
}
return wk;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBCVUZfMzIgMzIKCnZvaWQgcmVtb3ZlRU9MKGNoYXIgKnMpewoJY2hhciAqbmV3bGluZSA9IHN0cmNociggcywgJ1xuJyApOwoJaWYgKCBuZXdsaW5lICkKCQkqbmV3bGluZSA9IDA7Cn0KCmNoYXIgKnN0cnRva19yKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZGVsaW1zLCBjaGFyICoqc3RvcmUpOy8vc3RydG9rX3IgaXMgbm90IGluY2x1ZGVkIGluIGM5OQoKdm9pZCB0b2tlbml6ZXIyRChjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbWl0ZXIsIGludCBuY29scywgaW50IG1heFN0clNpemUsIGNoYXIgcm93VmVjW25jb2xzXVttYXhTdHJTaXplXSl7CgljaGFyICpzYXZlcHRyOyAKCWNoYXIgKnRva2VuID0gc3RydG9rX3IocywgZGVsaW1pdGVyLCAmc2F2ZXB0cik7CglpbnQgaiA9IDA7CgoJd2hpbGUgKHRva2VuICYmIGogPCBuY29scyl7CgkJc3RyY3B5KHJvd1ZlY1tqKytdLCB0b2tlbik7CgkJdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCBkZWxpbWl0ZXIsICZzYXZlcHRyKTsKCX0KfQoKdm9pZCByZWFkMm1hdChjb25zdCBjaGFyIGRlbGltW10sIGludCBucm93cywgaW50IG5jb2xzLCBpbnQgbWF4U3RyU2l6ZSwgY2hhciBtYXRbbnJvd3NdW25jb2xzXVttYXhTdHJTaXplXSl7CgljaGFyIGxpbmVhW21heFN0clNpemVdOwoJaW50IGkgPSAwOwoKCXdoaWxlIChmZ2V0cyhsaW5lYSwgbWF4U3RyU2l6ZSwgc3RkaW4pICYmIGkgPCBucm93cyl7CgkJcmVtb3ZlRU9MKGxpbmVhKTsKCQl0b2tlbml6ZXIyRChsaW5lYSwgZGVsaW0sIG5jb2xzLCBtYXhTdHJTaXplLCBtYXRbaSsrXSk7Cgl9Cn0KCmludCBtYWluKHZvaWQpewoJaW50IE4gPSAzLCBNID0gNTsKCWNoYXIgKCpBKVtNXVtCVUZfMzJdID0gbWFsbG9jKHNpemVvZihjaGFyW05dW01dW0JVRl8zMl0pKTsKCglyZWFkMm1hdCgiLCAiLCBOLCBNLCBCVUZfMzIsIEEpOwoJZm9yKGludCByID0gMDsgciA8IE47ICsrcil7CgkJZm9yKGludCBjID0gMDsgYyA8IE07ICsrYyl7CgkJCXByaW50ZigiJXMgIiwgQVtyXVtjXSk7CgkJfQoJCXB1dHMoIiIpOwoJfQoJZnJlZShBKTsKCXJldHVybiAwOwp9Ci8vQmVjYXVzZSBzdHJ0b2tfciBpcyBub3QgaW5jbHVkZWQgaW4gYzk5CmNoYXIgKnN0cnRva19yKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZGVsaW1zLCBjaGFyICoqc3RvcmUpewoJY2hhciAqcCwgKndrOwoJaWYoc3RyICE9IE5VTEwpewoJCSpzdG9yZSA9IHN0cjsKCX0KCWlmKCpzdG9yZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKCSpzdG9yZSArPSBzdHJzcG4oKnN0b3JlLCBkZWxpbXMpOy8vc2tpcCBkZWxpbWl0ZXIKCWlmKCoqc3RvcmUgPT0gJ1wwJykgcmV0dXJuIE5VTEw7CglwPXN0cnBicmsod2s9KnN0b3JlLCBkZWxpbXMpOwoJaWYocCAhPSBOVUxMKXsKCQkqcD0nXDAnOwoJCSpzdG9yZSA9IHAgKyAxOwoJfSBlbHNlIHsKCQkqc3RvcmUgPSBOVUxMOwoJfQoJcmV0dXJuIHdrOwp9Cg==
b25lLCB0d28sIHRocmVlLCBmb3VyLCBmaXZlCnJlZCwgYmx1ZSwgZ3JlZW4sIHdoaXRlLCBibGFjawphcHBsZSxjaGVycnksb3JhbmdlLGxlbW9uLHBlYWNo
one, two, three, four, five
red, blue, green, white, black
apple,cherry,orange,lemon,peach