C ++에서 문자열의 모든 문자에 대해 for 루프를 어떻게 수행합니까?
char
, 유니 코드 코드 포인트, 확장 된 grapheme 클러스터?
index
답변 부분에 대해 걱정하지 마십시오 .
C ++에서 문자열의 모든 문자에 대해 for 루프를 어떻게 수행합니까?
char
, 유니 코드 코드 포인트, 확장 된 grapheme 클러스터?
index
답변 부분에 대해 걱정하지 마십시오 .
답변:
관통 반복 문자 (A)의 std::string
사용 범위 기반 루프 (이미 GCC, 그 소리의 최근 릴리스에서 지원, C ++에서 11의, 그리고 VC11 베타)에 대한 :
std::string str = ???;
for(char& c : str) {
do_things_with(c);
}
std::string
반복자 를 사용하여 a의 문자를 반복 합니다.
std::string str = ???;
for(std::string::iterator it = str.begin(); it != str.end(); ++it) {
do_things_with(*it);
}
std::string
구식 for 루프를 사용하여의 문자를 반복합니다.
std::string str = ???;
for(std::string::size_type i = 0; i < str.size(); ++i) {
do_things_with(str[i]);
}
널 종료 문자 배열의 문자를 반복합니다.
char* str = ???;
for(char* it = str; *it; ++it) {
do_things_with(*it);
}
std::string
합니다.
for 루프는 다음과 같이 구현 될 수 있습니다 :
string str("HELLO");
for (int i = 0; i < str.size(); i++){
cout << str[i];
}
문자열을 문자별로 인쇄합니다. str[i]
index에서 문자를 반환합니다 i
.
문자 배열 인 경우 :
char str[6] = "hello";
for (int i = 0; str[i] != '\0'; i++){
cout << str[i];
}
기본적으로 위 두 가지는 c ++에서 지원하는 두 가지 유형의 문자열입니다. 두 번째는 c 문자열이라고하고 첫 번째는 std 문자열 또는 (c ++ 문자열)이라고합니다. 처리하기 쉬운 c ++ 문자열을 사용하는 것이 좋습니다.
현대 C ++에서 :
std::string s("Hello world");
for (char & c : s)
{
std::cout << "One character: " << c << "\n";
c = '*';
}
C ++ 98 / 03에서 :
for (std::string::iterator it = s.begin(), end = s.end(); it != end; ++it)
{
std::cout << "One character: " << *it << "\n";
*it = '*';
}
읽기 전용 반복의 경우 std::string::const_iterator
C ++ 98 for (char const & c : s)
또는 for (char c : s)
C ++ 11 에서만 사용할 수 있습니다 .
auto
항상 좋은 생각입니다. 그것을 사용할 때, 구별 begin()
과 cbegin()
관련이 있습니다.
char & c
입니까? 필요한 경우 문자 값을 수정할 수 있습니까?
const char* str = "abcde";
int len = strlen(str);
for (int i = 0; i < len; i++)
{
char chr = str[i];
//do something....
}
strlen
루프 조건에서 사용하기 에 좋은 형태로 간주되지 않습니다. 각 반복마다 문자열에서 O (n) 연산이 필요하므로 전체 루프 O (n ^ 2) 문자열의 크기. strlen
루프 중에 문자열이 변경되면 루프 조건에서 호출 할 수 있지만 실제로 필요한 경우에는 예약해야 합니다 .
C-string ( char []
)의 경우 다음과 같이해야합니다.
char mystring[] = "My String";
int size = strlen(mystring);
int i;
for(i = 0; i < size; i++) {
char c = mystring[i];
}
들어 std::string
당신이 사용할 수있는 str.size()
예제와 같은 크기와 반복 처리를 얻기 위해, 또는 반복자를 사용할 수 있습니다 :
std::string mystring = "My String";
std::string::iterator it;
for(it = mystring.begin(); it != mystring.end(); it++) {
char c = *it;
}
for (int x = 0; x < yourString.size();x++){
if (yourString[x] == 'a'){
//Do Something
}
if (yourString[x] == 'b'){
//Do Something
}
if (yourString[x] == 'c'){
//Do Something
}
//...........
}
문자열은 기본적으로 문자 배열이므로 문자를 가져 오기 위해 색인을 지정할 수 있습니다. 인덱스를 모르는 경우 위의 코드와 같이 인덱스를 반복 할 수 있지만 비교할 때는 작은 따옴표 (문자를 지정)를 사용해야합니다.
그 외에는 위의 코드가 자명하다.
std::string
?