3rdparty/c55lib/c55/string_util.h
parent
a370bcb166
commit
9a021d9b6f
|
@ -0,0 +1,112 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
|
||||
namespace c55
|
||||
{
|
||||
class Strfnd{
|
||||
std::string tek;
|
||||
unsigned int p;
|
||||
public:
|
||||
void start(std::string niinq){
|
||||
tek = niinq;
|
||||
p=0;
|
||||
}
|
||||
unsigned int where(){
|
||||
return p;
|
||||
}
|
||||
void to(unsigned int i){
|
||||
p = i;
|
||||
}
|
||||
std::string what(){
|
||||
return tek;
|
||||
}
|
||||
// Returns true if search_for was found
|
||||
bool next(const std::string &search_for, std::string &result){
|
||||
if(p >= tek.size())
|
||||
return false;
|
||||
size_t n = tek.find(search_for, p);
|
||||
bool did_find = (n != std::string::npos);
|
||||
if(n == std::string::npos || search_for == "")
|
||||
n = tek.size();
|
||||
result = tek.substr(p, n-p);
|
||||
p = n + search_for.length();
|
||||
return did_find;
|
||||
}
|
||||
std::string next(const std::string &search_for){
|
||||
std::string result;
|
||||
next(search_for, result);
|
||||
return result;
|
||||
}
|
||||
std::string while_any(const std::string &chars){
|
||||
if(chars.empty())
|
||||
return std::string();
|
||||
if(p >= tek.size())
|
||||
return std::string();
|
||||
size_t n = p;
|
||||
while(n < tek.size()){
|
||||
bool is = false;
|
||||
for(unsigned int i=0; i<chars.size(); i++){
|
||||
if(chars[i] == tek[n]){
|
||||
is = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!is) break;
|
||||
n++;
|
||||
}
|
||||
std::string result = tek.substr(p, n-p);
|
||||
p = n;
|
||||
return result;
|
||||
}
|
||||
bool atend(){
|
||||
if(p>=tek.size()) return true;
|
||||
return false;
|
||||
}
|
||||
Strfnd(std::string s){
|
||||
start(s);
|
||||
}
|
||||
};
|
||||
|
||||
inline std::string trim(std::string str, const std::string &whitespace=" \t\n\r")
|
||||
{
|
||||
size_t endpos = str.find_last_not_of(whitespace);
|
||||
if(std::string::npos != endpos)
|
||||
str = str.substr(0, endpos+1);
|
||||
size_t startpos = str.find_first_not_of(whitespace);
|
||||
if(std::string::npos != startpos)
|
||||
str = str.substr(startpos);
|
||||
return str;
|
||||
}
|
||||
|
||||
inline std::string vector_join(const std::vector<std::string> &v, const std::string &d=", ")
|
||||
{
|
||||
std::string result;
|
||||
for(auto v1 : v)
|
||||
result += (result.empty()?"":d) + v1;
|
||||
return result;
|
||||
}
|
||||
|
||||
inline std::string truncate_string(const std::string &str, size_t maxlen, const std::string &end="...")
|
||||
{
|
||||
if(str.size() < maxlen)
|
||||
return str;
|
||||
return str.substr(0, maxlen) + end;
|
||||
}
|
||||
|
||||
inline bool string_allowed(const std::string &s, const std::string &allowed_chars)
|
||||
{
|
||||
for(size_t i=0; i<s.size(); i++){
|
||||
bool confirmed = false;
|
||||
for(size_t j=0; j<allowed_chars.size(); j++){
|
||||
if(s[i] == allowed_chars[j]){
|
||||
confirmed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(confirmed == false)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue