Difference between r1.11 and the current
@@ -28,3 +28,180 @@
|| toUpper || str.toUpper() == "ABCDEF" || ||
|| valueOf || String::valueOf(3) == "3" || ||
|| valueOf || String::valueOf(3) == "3" || ||
== 소스 코드 ===
{{{
#include <iostream>
using namespace std;
class String{
private:
char* value;
int offset;
int count;
int size;
public:
String(){
value = NULL;
offset = 0;
count = 0;
size = 0;
}
String(const char* original){
// 길이 파악
size = 0;
for(;original[size] != '\0'; size++);
count = size;
// value에 데이터 복사
value = new char[size];
for(int i=0; i < size; i++)
value[i] = original[i];
offset = 0;
}
String(String& str, int o, int c){
value = str.value;
size = str.size;
offset = o>=size? 0: o;
count = c>size? size: c;
}
String subString(int off1, int off2){
if(off1 < 0 || off2 < 0 || off1 > off2) return String();
String str(*this, offset+off1, off2-off1);
return str;
}
int length() { return size; }
bool equals(String &str){
if(count != str.count) return false;
for(int i=0; i<count; i++){
if(value[offset+i] != str.value[str.offset + i]) return false;
}
return true;
}
void print(){
cout << "value : ";
for(int i=0; i<size; i++)
cout << value[i];
cout << endl << "size : " << size << endl << "offset : " << offset << endl << "count : " << count << endl;
cout << "print : ";
for(int i=0; i < count; i++)
cout << value[offset+i];
cout << endl << endl;
}
bool isEmpty(){ return (count == 0 || offset > size ); }
int indexOf(char c){
for(int i=0; i < count; i++)
if(value[offset+i] == c) return i;
return -1;
}
char charAt(int index){
if(index > count || index < 0) return '\0';
else return value[offset+index];
}
int lastIndexOf(char c){
int index = -1;
for(int i=0; i<count; i++)
if(value[offset+i] == c) index = i;
return index;
}
bool startsWith(const char* original){
for(int i=0; original[i] != '\0'; i++){
if(i >= count) return false;
if(original[i] != value[offset+i]) return false;
}
return true;
}
String concat(String &str){
int length = count + str.count;
char *nvalue = new char[length+1];
for(int i=0; i<count; i++) nvalue[i] = value[offset+i];
for(int i=0; i<str.count; i++) nvalue[count+i] = str.value[str.offset+i];
nvalue[length] = '\0';
return String(nvalue);
}
String trim(){
int firstIndex = offset;
int lastIndex = offset+count-1;
for(int i=firstIndex; i<count; i++){
if(value[i] != ' '){
firstIndex = i;
break;
}
}
for(int i=lastIndex; i >= offset; i--){
if(value[i] != ' '){
lastIndex = i+1;
break;
}
}
return String(*this, firstIndex, lastIndex-firstIndex);
}
};
int main(void){
String str1("abcdef");
str1.print();
String str2(str1, 3, 2);
str2.print();
String str3 = str1.subString(3, 5);
str3.print();
String str4("abcb");
str4.print();
String str5 = str1.concat(str1);
str5.print();
String str6(" ab e ");
str6.print();
str6 = str6.trim();
str6.print();
String str7("abcdefgh");
String str8("de");
//cout << str7.subString(2, 6).subString(1, 3).equals(str8) << endl;
cout << "str2 == str3? : " << str2.equals(str3) << endl;
cout << "str1 indexOf b : " << str1.indexOf('b') << endl;
cout << "str1 charAt 1 : " << str1.charAt(3) << endl;
cout << "str4 lastIndexOf b : " << str4.lastIndexOf('b') << endl;
cout << "str1 startsWith abc? : " << str1.startsWith("abc") << endl;
cout << "str4 startsWith abc? : " << str4.startsWith("abc") << endl;
cout << "str2 startsWith abc? : " << str2.startsWith("abc") << endl;
//printf("%d", '0');
return 0;
}
}}}
- 사용 언어 : C++
String str2("abcb");
String str3(" aB c ");
String str4(str); - 완료
함수 | 예 | 완수 여부 |
charAt | str.charAt(3) == 'd' | 완료 |
compareTo | str2.compareTo("abcb") == 0 | |
compareToIgnoreCase | str2.compareTo("AbCb") == 0 | |
concat | str.concat(str) == "abcdefabcdef" | |
contains | str.contains("bcd") == TRUE | |
endsWith | str.endsWith("ef") == TRUE | |
startsWith | str.startsWith("abc") == TRUE | 완료 |
equals | str.equals(new String("abcdef")) == TRUE | 완료 |
equalsIgnoreCase | str.equalsIgnoreCase(new String("ABcdEf")) == TRUE | |
indexOf | str2.indexOf("b") == 1 | 완료 |
isEmpty | str.isEmpty == FALSE | 완료 |
lastIndexOf | str2.lastIndexOf("b") == 3 | 완료 |
length | str.length() == 6 | 완료 |
replace | str.replace("bc", "ad") == "aaddef" | |
split | str.split("c") == {"ab", "def"} | |
subString | str.subString(2, 4) == "cd" | 완료 |
format | String::format("참석자 : %d명", 8) == "참석자 : 8명" | |
trim | str3.trim() == "aB c" | 완료 |
toLower | str3.toLower() == " ab c " | |
toUpper | str.toUpper() == "ABCDEF" | |
valueOf | String::valueOf(3) == "3" |
== 소스 코드 ===
#include <iostream> using namespace std; class String{ private: char* value; int offset; int count; int size; public: String(){ value = NULL; offset = 0; count = 0; size = 0; } String(const char* original){ // 길이 파악 size = 0; for(;original[size] != '\0'; size++); count = size; // value에 데이터 복사 value = new char[size]; for(int i=0; i < size; i++) value[i] = original[i]; offset = 0; } String(String& str, int o, int c){ value = str.value; size = str.size; offset = o>=size? 0: o; count = c>size? size: c; } String subString(int off1, int off2){ if(off1 < 0 || off2 < 0 || off1 > off2) return String(); String str(*this, offset+off1, off2-off1); return str; } int length() { return size; } bool equals(String &str){ if(count != str.count) return false; for(int i=0; i<count; i++){ if(value[offset+i] != str.value[str.offset + i]) return false; } return true; } void print(){ cout << "value : "; for(int i=0; i<size; i++) cout << value[i]; cout << endl << "size : " << size << endl << "offset : " << offset << endl << "count : " << count << endl; cout << "print : "; for(int i=0; i < count; i++) cout << value[offset+i]; cout << endl << endl; } bool isEmpty(){ return (count == 0 || offset > size ); } int indexOf(char c){ for(int i=0; i < count; i++) if(value[offset+i] == c) return i; return -1; } char charAt(int index){ if(index > count || index < 0) return '\0'; else return value[offset+index]; } int lastIndexOf(char c){ int index = -1; for(int i=0; i<count; i++) if(value[offset+i] == c) index = i; return index; } bool startsWith(const char* original){ for(int i=0; original[i] != '\0'; i++){ if(i >= count) return false; if(original[i] != value[offset+i]) return false; } return true; } String concat(String &str){ int length = count + str.count; char *nvalue = new char[length+1]; for(int i=0; i<count; i++) nvalue[i] = value[offset+i]; for(int i=0; i<str.count; i++) nvalue[count+i] = str.value[str.offset+i]; nvalue[length] = '\0'; return String(nvalue); } String trim(){ int firstIndex = offset; int lastIndex = offset+count-1; for(int i=firstIndex; i<count; i++){ if(value[i] != ' '){ firstIndex = i; break; } } for(int i=lastIndex; i >= offset; i--){ if(value[i] != ' '){ lastIndex = i+1; break; } } return String(*this, firstIndex, lastIndex-firstIndex); } }; int main(void){ String str1("abcdef"); str1.print(); String str2(str1, 3, 2); str2.print(); String str3 = str1.subString(3, 5); str3.print(); String str4("abcb"); str4.print(); String str5 = str1.concat(str1); str5.print(); String str6(" ab e "); str6.print(); str6 = str6.trim(); str6.print(); String str7("abcdefgh"); String str8("de"); //cout << str7.subString(2, 6).subString(1, 3).equals(str8) << endl; cout << "str2 == str3? : " << str2.equals(str3) << endl; cout << "str1 indexOf b : " << str1.indexOf('b') << endl; cout << "str1 charAt 1 : " << str1.charAt(3) << endl; cout << "str4 lastIndexOf b : " << str4.lastIndexOf('b') << endl; cout << "str1 startsWith abc? : " << str1.startsWith("abc") << endl; cout << "str4 startsWith abc? : " << str4.startsWith("abc") << endl; cout << "str2 startsWith abc? : " << str2.startsWith("abc") << endl; //printf("%d", '0'); return 0; }