string.empty와 string [0]의 차이점 == '\ 0'
문자열이 있다고 가정합니다.
std::string str; // some value is assigned
str.empty()
과 의 차이점은 무엇입니까 str[0] == '\0'
?
C ++ 11 이상
string_variable[0]
문자열이 비어있는 경우 널 문자를 리턴하는 데 필요합니다. 이렇게하면 정의되지 않은 동작이 없으며 문자열이 실제로 비어있는 경우에도 비교가 작동합니다. 그러나 비어 있지 않아도 반환 하는 null 문자 ( )로 시작하는 문자열을 가질 수 있습니다 . 비어 있는지 정말로 알고 싶다면 ."\0Hi there"
true
empty()
C ++ 11 이전
차이점은 문자열이 비어 있으면 string_variable[0]
정의되지 않은 동작이 있다는 것입니다. 문자열이 규정되지 않으면 인덱스 0이 없습니다 const
. 문자열 이 const
규정되면 널 문자를 리턴합니다.
string_variable.empty()
반면에 문자열이 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. 동작은 정의되지 않습니다.
요약
empty()
문자열 / 컨테이너가 비어 있는지 여부를 확인하기위한 것입니다. 그것은 그것을 제공하는 모든 컨테이너에서 작동하며 사용 empty
은 의도 를 명확하게 나타냅니다. 즉, 코드를 읽는 사람들에게 많은 의미가 있습니다.
C ++ 11 이후로 str[str.size()] == '\0'
. 즉, 문자열이 비어 있으면 str[0] == '\0'
. 그러나 C ++ 문자열에는 명시적인 길이 필드가 있으므로 포함 된 null 문자를 포함 할 수 있습니다.
에 대한 예 std::string str("\0ab", 3)
, str[0] == '\0'
하지만 str.empty()
false입니다.
게다가, str.empty()
보다 더 많은 읽을 수 있습니다 str[0] == '\0'
.
여기에있는 다른 답변은 100 % 정확합니다. 세 가지 메모를 더 추가하고 싶습니다.
empty
일반 상태 (모든 STL 컨테이너 구현이 함수)이다 operator []
으로 size_t
만 캐릭터 오브젝트 및 컨테이너 어레이 형상으로 작동한다. 일반 STL 코드를 다룰 때 empty
선호됩니다.
또한 empty
별로 자명 =='\0'
하지 않지만 거의 자명 합니다. 그것의 오전 2시 당신이 당신의 코드를 디버깅 할 때, 당신은 볼 선호 if(str.empty())
나 if(str[0] == '\0')
? 기능 만 중요하다면 우리는 모두 바닐라 어셈블리로 작성합니다.
또한 성능이 저하됩니다. empty
일반적으로 문자열의 크기 멤버를 0으로 비교하여 구현합니다. 이는 매우 저렴하고 인라인하기 쉽습니다. 첫 번째 문자와 비교하면 더 무거울 수 있습니다. 우선, 모든 문자열이 짧은 문자열 최적화를 구현하기 때문에 프로그램은 먼저 문자열이 "짧은 모드"인지 "긴 모드"인지 물어봐야합니다. 분기-성능 저하. 문자열이 길면 문자열이 잠시 "무시"되고 역 참조 자체로 인해 비용이 많이 드는 캐시 오류가 발생할 경우 역 참조하는 데 비용이 많이들 수 있습니다.
empty ()는 위치 0에서 null 문자의 존재를 찾는 것으로 구현되지 않습니다.
bool empty() const
{
return size() == 0 ;
}
다를 수 있습니다
또한 C ++ 11 이상 버전을 사용하는 경우 사용할 함수에 유의하세요.
#include <iostream>
#include <cstring>
int main() {
std::string str("\0ab", 3);
std::cout << "The size of str is " << str.size() << " bytes.\n";
std::cout << "The size of str is " << str.length() << " long.\n";
std::cout << "The size of str is " << std::strlen(str.c_str()) << " long.\n";
return 0;
}
돌아올 것이다
str의 크기는 3 바이트입니다.
str의 크기는 3입니다.
str의 크기는 0입니다.
C ++ 문자열에는 비어 있는지 여부에 대한 개념이 있습니다. 문자열이 비어 있으면 str [0]은 정의되지 않습니다. C ++ 문자열의 크기가> 1 인 경우에만 str [0]이 정의됩니다.
str [i] == '\ 0'은 C- 스트링 스타일의 개념입니다. C- 문자열 구현에서 문자열의 마지막 문자는 C- 문자열의 끝을 표시하는 '\ 0'입니다.
C- 문자열의 경우 일반적으로 별도의 변수를 사용하여 문자열 길이를 '기억'해야합니다. C ++ String에서는 '\ 0'으로 모든 위치를 지정할 수 있습니다.
플레이 할 코드 세그먼트 :
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
char str[5] = "abc";
cout << str << " length: " << strlen(str) << endl;
cout << "char at 4th position: " << str[3] << "|" << endl;
cout << "char at 5th position: " << str[4] << "|" << endl;
str[4]='X'; // this is OK, since Cstring is just an array of char!
cout << "char at 5th position after assignment: " << str[4] << "|" << endl;
string cppstr("abc");
cppstr.resize(3);
cout << "cppstr: " << cppstr << " length: " << cppstr.length() << endl;
cout << "char at 4th position:" << cppstr[3] << endl;
cout << "char at 401th positon:" << cppstr[400] << endl;
// you should be getting segmentation fault in the
// above two lines! But this may not happen every time.
cppstr[0] = '\0';
str[0] = '\0';
cout << "After zero the first char. Cstring: " << str << " length: " << strlen(str) << " | C++String: " << cppstr << " length: " << cppstr.length() << endl;
return 0;
}
내 컴퓨터에서 출력 :
abc length: 3
char at 4th position: |
char at 5th position: |
char at 5th position after assignment: X|
cppstr: abc length: 3
char at 4th position:
char at 401th positon:?
After zero the first char. Cstring: length: 0 | C++String: bc length: 3
의 차이점을 알고 싶습니다 str.empty() and str[0] == '\0'
. 예를 따르십시오.
#include<iostream>
#include<string>
using namespace std;
int main(){
string str, str2; //both string is empty
str2 = "values"; //assigning a value to 'str2' string
str2[0] = '\0'; //assigning '\0' to str2[0], to make sure i have '\0' at 0 index
if(str.empty()) cout << "str is empty" << endl;
else cout << "str contains: " << str << endl;
if(str2.empty()) cout << "str2 is empty" << endl;
else cout << "str2 contains: " << str2 << endl;
return 0;
}
산출:
str is empty
str2 contains: alues
str.empty()
will let you know the string is empty or not and str[0] == '\0'
will let you know your strings 0 index contains '\0'
or not. Your string variables 0 index contains '\0'
doesn't mean that your string is empty. Yes, only once it can be possible when your string length is 1 and your string variables 0 index contains '\0'
. That time you can say that, its an empty string.
참고URL : https://stackoverflow.com/questions/39725183/difference-between-string-empty-and-string0-0
'Programing' 카테고리의 다른 글
터미널을 사용하여 Mac OS X에서 C 프로그램을 실행하는 방법은 무엇입니까? (0) | 2020.11.23 |
---|---|
API Gateway CORS : 'Access-Control-Allow-Origin'헤더 없음 (0) | 2020.11.23 |
자바 스크립트에서 사용자 에이전트를 조롱합니까? (0) | 2020.11.23 |
rebase가 시작된 이후 이전 git rebase를 중단하고 커밋을 잃었습니다. (0) | 2020.11.23 |
명령 줄에서 Chrome 열기 (0) | 2020.11.23 |