mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
This commit is contained in:
parent
724c3f491c
commit
cb36966464
@ -86,11 +86,14 @@ def str::split(self, sep):
|
|||||||
res.append(self)
|
res.append(self)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def str::index(self, sub):
|
def str::format(self, *args):
|
||||||
for i in range(len(self)):
|
if '{}' in self:
|
||||||
if self[i:i+len(sub)] == sub:
|
for i in range(len(args)):
|
||||||
return i
|
self = self.replace('{}', str(args[i]), 1)
|
||||||
return -1
|
else:
|
||||||
|
for i in range(len(args)):
|
||||||
|
self = self.replace('{'+str(i)+'}', str(args[i]))
|
||||||
|
return self
|
||||||
|
|
||||||
def str::strip(self, chars=None):
|
def str::strip(self, chars=None):
|
||||||
chars = chars or ' \t\n\r'
|
chars = chars or ' \t\n\r'
|
||||||
|
@ -390,11 +390,21 @@ inline void init_builtins(VM* _vm) {
|
|||||||
return VAR(self < obj);
|
return VAR(self < obj);
|
||||||
});
|
});
|
||||||
|
|
||||||
_vm->bind_method<2>("str", "replace", [](VM* vm, ArgsView args) {
|
_vm->bind_method<-1>("str", "replace", [](VM* vm, ArgsView args) {
|
||||||
|
if(args.size() != 1+2 && args.size() != 1+3) vm->TypeError("replace() takes 2 or 3 arguments");
|
||||||
const Str& self = CAST(Str&, args[0]);
|
const Str& self = CAST(Str&, args[0]);
|
||||||
const Str& old = CAST(Str&, args[1]);
|
const Str& old = CAST(Str&, args[1]);
|
||||||
const Str& new_ = CAST(Str&, args[2]);
|
const Str& new_ = CAST(Str&, args[2]);
|
||||||
return VAR(self.replace(old, new_));
|
int count = args.size()==1+3 ? CAST(int, args[3]) : -1;
|
||||||
|
return VAR(self.replace(old, new_, count));
|
||||||
|
});
|
||||||
|
|
||||||
|
_vm->bind_method<1>("str", "index", [](VM* vm, ArgsView args) {
|
||||||
|
const Str& self = CAST(Str&, args[0]);
|
||||||
|
const Str& sub = CAST(Str&, args[1]);
|
||||||
|
int index = self.index(sub);
|
||||||
|
if(index == -1) vm->ValueError("substring not found");
|
||||||
|
return VAR(index);
|
||||||
});
|
});
|
||||||
|
|
||||||
_vm->bind_method<1>("str", "startswith", [](VM* vm, ArgsView args) {
|
_vm->bind_method<1>("str", "startswith", [](VM* vm, ArgsView args) {
|
||||||
|
@ -224,19 +224,18 @@ struct Str{
|
|||||||
return p - data;
|
return p - data;
|
||||||
}
|
}
|
||||||
|
|
||||||
Str replace(const Str& old, const Str& new_) const {
|
Str replace(const Str& old, const Str& new_, int count=-1) const {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
int start = 0;
|
int start = 0;
|
||||||
while(true){
|
while(true){
|
||||||
int i = index(old, start);
|
int i = index(old, start);
|
||||||
if(i == -1){
|
if(i == -1) break;
|
||||||
ss << substr(start, size - start);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ss << substr(start, i - start);
|
ss << substr(start, i - start);
|
||||||
ss << new_;
|
ss << new_;
|
||||||
start = i + old.size;
|
start = i + old.size;
|
||||||
|
if(count != -1 && --count == 0) break;
|
||||||
}
|
}
|
||||||
|
ss << substr(start, size - start);
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,3 +76,9 @@ assert str(num) == '6'
|
|||||||
|
|
||||||
测试 = "test"
|
测试 = "test"
|
||||||
assert 测试 == "test"
|
assert 测试 == "test"
|
||||||
|
|
||||||
|
assert "Hello, {}!".format("World") == "Hello, World!"
|
||||||
|
assert "{} {} {}".format("I", "love", "Python") == "I love Python"
|
||||||
|
assert "{0} {1} {2}".format("I", "love", "Python") == "I love Python"
|
||||||
|
assert "{2} {1} {0}".format("I", "love", "Python") == "Python love I"
|
||||||
|
assert "{0}{1}{0}".format("abra", "cad") == "abracadabra"
|
Loading…
x
Reference in New Issue
Block a user