programing

단일 문자로 문자열을 만들려면 어떻게 해야 합니까?

muds 2023. 7. 30. 18:10
반응형

단일 문자로 문자열을 만들려면 어떻게 해야 합니까?

싱글이 있습니다.char가치, 그리고 나는 그것을 캐스팅/변환해야 합니다.std::string어떻게 해야 하나요?

반대 방향으로 가는 방법을 알고 있어요, 검색하기 위해서요.chara부터std::stringobject: 적절한 위치에서 문자열을 인덱싱하기만 하면 됩니다.예:str[0]문자열의 첫 번째 문자를 검색합니다.

그런데 어떻게 반대로 가야 하나요?저는 다음과 같은 것을 원합니다.

char c = 34;
std::string s(c);

…하지만 이것은 작동하지 않습니다(문자열은 항상 비어 있습니다).

다음을 모두 사용하여 다음을 생성할 수 있습니다.std::string단일 문자로 시작:

  • std::string s(1, c);
    
    std::cout << s << std::endl;
    
  • std::string s{c};
    
    std::cout << s << std::endl;
    
  • std::string s;
    s.push_back(c);
    
    std::cout << s << std::endl;
    

std::string에는 숫자와 문자를 사용하는 생성자가 있습니다.해당 캐릭터는 지정된 횟수만큼 반복됩니다.따라서 다음을 사용해야 합니다.

std::string str(1, ch);

문자열 스트림을 시도할 수 있습니다.예는 다음과 같습니다.

#include <sstream>
#include <string>

std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

이 솔루션은 다음의 수에 관계없이 작동합니다.char변수:

char c1 = 'z';
char c2 = 'w';
std::string s1{c1};
std::string s12{c1, c2};

두 번의 반복을 사용하여 문자열 생성자를 사용할 수 있습니다.

char c = 'x';
std::string(&c, &c + 1);

업데이트:

제임스와 지만에게 좋은 질문입니다.방금 데릭 M. 존스가 무료로 다운로드할 수 있는 "The New C Standard"에서 "pinter past"를 검색했는데, 제 첫 번째 히트곡은 다음과 같습니다.

표현식 P가 배열 개체의 요소를 가리키고 표현식 Q가 동일한 배열 개체의 마지막 요소를 가리킬 경우 포인터 표현식 Q+1은 P...보다 큰 값을 비교합니다.Q+1이 배열 개체의 요소를 가리키지 않더라도...

세그먼트 아키텍처에서 세그먼트의 끝을 지나 포인터가 증가하면 주소는 세그먼트 아키텍처를 해당 세그먼트의 시작(일반적으로 주소 0)으로 감싼다.만약 배열이 그러한 세그먼트 내에 할당된다면, 구현체는 배열 뒤에 끝 주소를 지나 하나가 될 공간이 있는지 확인하거나, 이 경우를 처리하기 위해 다른 구현 기법을 사용해야 합니다(예: 사용된 세그먼트가 포인터 표현의 일부일 경우).종료 세그먼트 값을 지난 특별한 값이 할당될 수 있음)...

상관 관계 연산자 모델을 사용하면 개체에 대한 포인터를 배열 개체에 대한 인덱스와 동일한 방식으로 처리할 수 있습니다.두 개의 서로 다른 배열 개체(둘 다 더 큰 개체의 하위 개체가 아님)로 인덱스를 비교하는 것은 거의 의미가 없으며 표준에서는 포인터에 대한 지원을 정의하지 않습니다.일부 애플리케이션은 스토리지에서 서로 다른 개체의 상대적 위치에 대한 정보를 활용해야 합니다.그러나, 이 사용법은 위원회가 행동을 정의하는 모델을 지정하기에 충분하지 않은 일반적인 유용성으로 간주되었습니다...

대부분의 구현에서는 포인터 유형이 있는 값에 대한 작업 전에 검사를 수행하지 않습니다.대부분의 프로세서는 산술 유형에 사용하는 것과 동일한 지침을 사용하여 포인터 유형과 관련된 관계 비교를 수행합니다.세그먼트 메모리 아키텍처를 사용하는 프로세서의 경우 포인터 값은 세그먼트 번호와 해당 세그먼트 내 오프셋이라는 두 가지 구성 요소를 사용하여 표시되는 경우가 많습니다.이 표현의 결과로 단일 세그먼트 내에 적합하도록 객체에 대한 스토리지를 할당하면 많은 이점이 있습니다(즉, 객체에 대한 스토리지가 세그먼트 경계에 걸쳐 있지 않음).한 가지 이점은 세그먼트 오프셋 구성 요소만 확인하면 되는 일부 관계형 연산자에 대해 생성된 기계 코드와 관련된 최적화입니다.이로 인해 p와 q가 서로 다른 개체를 가리킬 때 p > = q는 거짓이지만 p > q는 참인 상황이 발생할 수 있습니다.

이것은 gcc C++ 4.9.2 (http://ideone.com/f3qhTe) 에서 작동합니다.

#include <iostream>
using namespace std;

int main() {
    // your code goes here
    std::string test;

    test = (char) 76;
    test += (char) 77;
    test += (char) 78;
    test += (char) 79;

    std::cout << "test contains: " << test << std::endl;
    return 0;
}

대부분의 경우 사용할 수 있습니다.{ch}.

std::string s = {ch}; // works
infix.push({ch}); // works

std::initializer_list 생성자를 사용합니다.std::string.

잘 당신의 저는자바잘를모에르만지다당니 C++과 C++에서 가깝습니다.ch + "" 마일 것입니다.std::string{} + ch참고로, 그것은""가 아닙니다.std::string 수 없기 에 그고기유대연본를오산수할없다니습드버로리자해형.ch+""절대로 결과를 초래할 수 없습니다.std::string.

하만지,std::string{} + ch2개의 문자열을 포함합니다.될 수 한하게 괜찮습니다: 컴일러가임최시수있한문구문자좋것성습다니완는은게벽하하.std::string(1,ch).

생자의경우의 시공자를 .std::string는 당신을 https://en.cppreference.com/w/cpp/string/basic_string/basic_string 을 참조하십시오.

문자열을 문자와 동일하게 설정할 수 있습니다.

#include <iostream>
#include <string>

using namespace std;

int main()
{
   string s;
   char one = '1';
   char two = '2';
   s = one;
   s += two;
   cout << s << endl;
}

./테스트
12

언급URL : https://stackoverflow.com/questions/17201590/how-can-i-create-a-string-from-a-single-character

반응형