homework/cpp/_rvmain.cpp

152 lines
2.8 KiB
C++

#include <stdint.h>
int strlen(char *s) {
char *p = s;
while (*p != '\0')
p++;
return p - s;
}
void strcpy(char *s, char *t)
{
while (*s++ = *t++);
}
// Effective C++ by Scott Meyers
// page. 6
// Item 1: Prefer const and inline to #define.
//
class NewDefine{
private:
static const int ALLOCSIZE= 10000;
};
const int NewDefine::ALLOCSIZE;
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE];
static char *allocp = allocbuf;
char *alloc(int n)
{
if (n % 4 != 0) {
n += 4 - (n % 4);
}
if (allocbuf + ALLOCSIZE - allocp >= n) {
allocp += n;
return allocp - n;
} else
return 0;
}
// def. model danych
//pre processor
#define LEN (8+2)*10
struct model {
char * ptr;
uint32_t len ;
};
//alg
// prosta implementacji func. z bibl. std. strok przy uzyciu gpt3.5
//
#define NULL ((void*) 0)
bool is_delim(char c, const char *delims) {
while (*delims) {
if (c == *delims) {
return true;
}
delims++;
}
return false;
}
char *simple_strtok(char *str, const char *delims) {
static char *static_str = (char *) NULL;
if (str !=(char *) NULL) {
static_str = str;
}
if (static_str == (char *) NULL) {
return (char *)NULL;
}
while (*static_str && is_delim(*static_str, delims)) {
static_str++;
}
if (*static_str == '\0') {
return (char *)NULL;
}
char *token_start = static_str;
while (*static_str && !is_delim(*static_str, delims)) {
static_str++;
}
if (*static_str) {
*static_str = '\0';
static_str++;
}
return token_start;
}
char buf[1000];
struct model * p = (struct model *) buf; //p[1]
/*
int alg(char *ptr) {
const char *delims = " ,.!?:;\n\t";
int pos = 0;
char *token = simple_strtok(ptr, delims);
while (token != (char *)NULL) {
p[pos].ptr = token;
p[pos].len = strlen(token);
++pos;
token = simple_strtok((char *)NULL, delims);
}
return pos;
}
*/
int alg(char *ptr) {
const char *delims = " ,.!?:;\n\t";
int pos = 0;
char *token = simple_strtok(ptr, delims);
while (token != (char *)NULL) {
p[pos].ptr = token;
p[pos].len = strlen(token);
++pos;
token = simple_strtok((char *)NULL, delims);
}
return pos;
}
// gdb: p/x (model[]*)p[0].len
// gdb: p/s (char *)(model[]*)p[2].ptr
// :) powered by rv32i
int main() {
char *str = " Success is often defined as the ability to reach your goals in life, whatever those goals may be. In some ways, a better word for success might be attainment, accomplishment, or progress. It is not necessarily a destination but a journey that helps develop the skills and resources you need to thrive.";
alg(str);
asm ("nop");
return 1;
}