[c++] std :: string에 문자를 추가하는 방법은 무엇입니까?

다음은 오류와 함께 실패합니다 prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’

int main()
{
  char d = 'd';
  std::string y("Hello worl");
  y.append(d); // Line 5 - this fails
  std::cout << y;
  return 0;
}

또한 컴파일했지만 런타임에 임의로 동작하는 다음을 시도했습니다.

int main()
{
  char d[1] = { 'd' };
  std::string y("Hello worl");
  y.append(d);
  std::cout << y;
  return 0;
}

이 바보 같은 질문에 대해 죄송하지만 Google에서 검색 한 결과 “char array to char ptr”, “char ptr to char array”등이 있습니다.



답변

y += d;

+=명명 된 함수 대신 연산자를 사용 합니다.


답변

사용 push_back():

std::string y("Hello worl");
y.push_back('d')
std::cout << y;


답변

append 메소드를 사용하여 std :: string var에 char를 추가하려면이 오버로드를 사용해야합니다.

std::string::append(size_type _Count, char _Ch)

편집 : 맞습니다. 컨텍스트 도움말에 표시된 size_type 매개 변수를 잘못 이해했습니다. 추가 할 문자 수입니다. 올바른 전화는

s.append(1, d);

아니

s.append(sizeof(char), d);

또는 가장 간단한 방법 :

s += d;


답변

언급 된 다른 것 외에도 문자열 생성자 중 하나는 char과 해당 char에 대한 반복 횟수를 취합니다. 이를 사용하여 단일 문자를 추가 할 수 있습니다.

std::string s = "hell";
s += std::string(1, 'o');


답변

여러 제안을 큰 고리로 실행하여 테스트합니다. Microsoft Visual Studio 2015를 컴파일러로 사용했으며 프로세서는 i7, 8Hz, 2GHz입니다.

    long start = clock();
    int a = 0;
    //100000000
    std::string ret;
    for (int i = 0; i < 60000000; i++)
    {
        ret.append(1, ' ');
        //ret += ' ';
        //ret.push_back(' ');
        //ret.insert(ret.end(), 1, ' ');
        //ret.resize(ret.size() + 1, ' ');
    }
    long stop = clock();
    long test = stop - start;
    return 0;

이 테스트에 따르면 결과는 다음과 같습니다.

     operation             time(ms)            note
------------------------------------------------------------------------
append                     66015
+=                         67328      1.02 time slower than 'append'
resize                     83867      1.27 time slower than 'append'
push_back & insert         90000      more than 1.36 time slower than 'append'

결론

+= 더 이해하기 쉬운 것처럼 보이지만 속도에 관심이 있다면 추가를 사용하십시오.


답변

+ = 연산자 링크 텍스트 , append () 메소드 링크 텍스트 또는 push_back () 메소드 링크 텍스트를 사용해보십시오

이 게시물의 링크에는 해당 API를 사용하는 방법에 대한 예제도 포함되어 있습니다.


답변

문제 :

std::string y("Hello worl");
y.push_back('d')
std::cout << y;

char d = ‘d’와 같이 char 이름을 사용하는 것과는 반대로 ‘d’를 가져야한다는 것입니다. 아니면 내가 틀렸어?