Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2516a69

Browse files
authored
Merge pull request#200 from PiotrekB416/Fix/string-replace-multiple-longer-by-shorter
Fixed string::replace doesn't replace multiple occurrences of longer string with shorter one
2 parents50a27fb +12fb6ba commit2516a69

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

‎api/String.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,10 @@ void String::move(String &rhs)
234234
String & String::operator = (const String &rhs)
235235
{
236236
if (this == &rhs)return *this;
237-
237+
238238
if (rhs.buffer)copy(rhs.buffer, rhs.len);
239239
elseinvalidate();
240-
240+
241241
return *this;
242242
}
243243

@@ -253,7 +253,7 @@ String & String::operator = (const char *cstr)
253253
{
254254
if (cstr)copy(cstr,strlen(cstr));
255255
elseinvalidate();
256-
256+
257257
return *this;
258258
}
259259

@@ -484,7 +484,7 @@ bool String::equalsIgnoreCase( const String &s2 ) const
484484
constchar *p2 = s2.buffer;
485485
while (*p1) {
486486
if (tolower(*p1++) !=tolower(*p2++))returnfalse;
487-
}
487+
}
488488
returntrue;
489489
}
490490

@@ -515,7 +515,7 @@ char String::charAt(unsigned int loc) const
515515
returnoperator[](loc);
516516
}
517517

518-
voidString::setCharAt(unsignedint loc,char c)
518+
voidString::setCharAt(unsignedint loc,char c)
519519
{
520520
if (loc < len) buffer[loc] = c;
521521
}
@@ -652,9 +652,9 @@ void String::replace(const String& find, const String& replace)
652652
}
653653
}elseif (diff <0) {
654654
unsignedint size = len;// compute size needed for result
655+
diff =0 - diff;
655656
while ((foundAt =strstr(readFrom, find.buffer)) !=NULL) {
656657
readFrom = foundAt + find.len;
657-
diff =0 - diff;
658658
size -= diff;
659659
}
660660
if (size == len)return;

‎test/src/String/test_replace.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,24 @@ TEST_CASE ("Testing String::replace(String, String) substr 'find' smaller than '
6666
str.replace(arduino::String("ll"),arduino::String("111"));
6767
REQUIRE(str =="He111o Arduino!");
6868
}
69+
70+
TEST_CASE ("Testing String::replace(String, String) substr 'find' smaller than 'replace' multiple occurencies","[String-replace-08]")
71+
{
72+
arduino::Stringstr("Hello Arduino! Hello, Hello, Hello");
73+
str.replace(arduino::String("ll"),arduino::String("lll"));
74+
REQUIRE(str =="Helllo Arduino! Helllo, Helllo, Helllo");
75+
}
76+
77+
TEST_CASE ("Testing String::replace(String, String) substr 'find' same length as 'replace' multiple occurencies","[String-replace-09]")
78+
{
79+
arduino::Stringstr("Hello Arduino! Hello, Hello, Hello");
80+
str.replace(arduino::String("ll"),arduino::String("11"));
81+
REQUIRE(str =="He11o Arduino! He11o, He11o, He11o");
82+
}
83+
84+
TEST_CASE ("Testing String::replace(String, String) substr 'find' larger than 'replace' multiple occurencies","[String-replace-10]")
85+
{
86+
arduino::Stringstr("Helllo Arduino! Helllo, Helllo, Helllo");
87+
str.replace(arduino::String("lll"),arduino::String("ll"));
88+
REQUIRE(str =="Hello Arduino! Hello, Hello, Hello");
89+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp