Advertisement
Guest User

Untitled

a guest
Apr 20th, 2014
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. struct cella {
  2. char *token;
  3. struct cella *next;
  4. };
  5. typedef struct cella *ListaToken;
  6.  
  7. ListaToken tokenize(char *s) {
  8. ListaToken l;
  9. int i;
  10. while (s[i]){
  11. l = (ListaToken)malloc(sizeof(ListaToken));
  12. l->next = s[i];
  13. i++;
  14. }
  15. l->next = NULL;
  16. return l;
  17. }
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22.  
  23. typedef struct cella {
  24. char *token;
  25. struct cella *next;
  26. } *ListaToken;
  27.  
  28. ListaToken tokenize(const char *s) {
  29. ListaToken top = NULL, current, l;
  30. char *p, *tmps = strdup(s);
  31.  
  32. for(p=strtok(tmps, " ");p;p=strtok(NULL, " ")){
  33. l = malloc(sizeof(*l));
  34. l->token = strdup(p);
  35. l->next = NULL;
  36. if(top == NULL){
  37. current = top = l;
  38. } else {
  39. current->next = l;
  40. current = l;
  41. }
  42. }
  43. free(tmps);
  44. return top;
  45. }
  46.  
  47. void print(ListaToken l){
  48. while(l){
  49. printf(""%s" -> ", l->token);
  50. l = l->next;
  51. }
  52. printf("NULLn");
  53. }
  54. int main(){
  55. ListaToken list1, list2;
  56. list1 = tokenize("12 17 + 4 3 - /");
  57. print(list1);
  58. list2 = tokenize("12 17 + 4 - /");
  59. print(list2);
  60.  
  61. return 0;
  62. }
  63.  
  64. char *mystrdup(const char *s){
  65. char *dup = malloc(strlen(s) + 1);
  66. return strcpy(dup, s);
  67. }
  68.  
  69. char *mystrtok_r(char *str, const char *delims, char **store){
  70. char *p, *wk;
  71. if(str != NULL){
  72. *store = str;
  73. }
  74. if(*store == NULL) return NULL;
  75. *store += strspn(*store, delims);//skip delimiter
  76. if(**store == '') return NULL;
  77. p=strpbrk(wk=*store, delims);
  78. if(p != NULL){
  79. *p='';
  80. *store = p + 1;
  81. } else {
  82. *store = NULL;
  83. }
  84. return wk;
  85. }
  86.  
  87. char *mystrtok(char *str, const char *delimis){
  88. static char *store;
  89. return mystrtok_r(str, delimis, &store);
  90. }
  91.  
  92. ListaToken tokenize(const char *s) {
  93. ListaToken top = NULL, current, l;
  94. const char *p = s, token[16];
  95. int len=0;
  96. while(1==sscanf(p, "%15s%n", token, &len)){
  97. l = malloc(sizeof(*l));
  98. l->token = malloc(len + 1);
  99. strcpy(l->token, token);
  100. p += len;
  101. l->next = NULL;
  102. if(top == NULL){
  103. current = top = l;
  104. } else {
  105. current->next = l;
  106. current = l;
  107. }
  108. }
  109. return top;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement