codememo

std:: 문자열에 문자를 추가하는 방법?

tipmemo 2023. 11. 4. 10:50
반응형

std:: 문자열에 문자를 추가하는 방법?

다음은 오류로 인해 실패합니다.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;
}

이 바보 같은 질문에 죄송합니다. 하지만 구글 주변을 검색해보니 "char array to charttr", "charttr 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;

언급된 다른 것들 외에도, 문자열 생성자 중 한 명이 문자와 해당 문자에 대한 반복 횟수를 취합니다.그래서 당신은 그것을 하나의 차를 추가하는데 사용할 수 있습니다.

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

나는 여러 명제들을 큰 루프로 실행하여 테스트합니다.마이크로소프트 비주얼 스튜디오 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'와 같은 char의 이름을 사용하는 것이 아니라 'd'를 가져야 한다는 것입니까? 아니면 제가 틀린 것입니까?

int main()
{
  char d = 'd';
  std::string y("Hello worl");

  y += d;
  y.push_back(d);
  y.append(1, d); //appending the character 1 time
  y.insert(y.end(), 1, d); //appending the character 1 time
  y.resize(y.size()+1, d); //appending the character 1 time
  y += std::string(1, d); //appending the character 1 time
}

다음 예제에서는 문자 리터럴을 직접 사용할 수 있었습니다.y += 'd';.

두 번째 예는 관련이 없는 이유로 거의 효과가 있었을 것입니다.char d[1] = { 'd'};효과는 없었지만,char d[2] = { 'd'};(배열이 크기 2임을 유의하십시오) 대략 다음과 같은 작업이 이루어졌을 것입니다.const char* d = "d";, 문자열 리터럴을 추가할 수 있습니다.y.append(d);.

아직 언급하지 않은 삽입 옵션도 추가하고 있습니다.

std::string str("Hello World");
char ch;

str.push_back(ch);  //ch is the character to be added
OR
str.append(sizeof(ch),ch);
OR
str.insert(str.length(),sizeof(ch),ch) //not mentioned above

das 포인터 y.append(*d)를 사용해 보십시오.

간단한 방법을 찾았는데...전 그 일을 해결할 필요가 있었어요char날렵하게 만들어지던 끈 위에 말이죠.나는 필요했습니다.char list;사용자에게 선택권을 주고 그 선택권을 사용했기 때문입니다.switch()진술.

저는 단지 다른 것을 추가했을 뿐입니다.std::string Slist;그리고 새 문자열을 "list" 문자와 동일하게 설정합니다. - a, b, c 또는 최종 사용자가 다음과 같이 선택하는 것입니다.

char list;
std::string cmd, state[], Slist;
Slist = list; //set this string to the chosen char;
cmd = Slist + state[x] + "whatever";
system(cmd.c_str());

복잡함이 시원할 수도 있지만 단순함이 더 시원합니다. IMHO

이를 수행하는 세 가지 방법이 있습니다.
예를 들어 다음과 같은 코드가 있습니다.
std::string str_value = "origin";
char c_append = 'c';

  1. 저희는 주로 push_back을 사용합니다.
    str_value.push_back(c)
  2. += 를 사용합니다.
    str_value += c
  3. 덧셈법을 사용합니다.
    str_value.append(1,c)
    그리고 http://www.cplusplus.com/reference/string/string/ 에서 문자열을 사용하는 방법에 대해 자세히 알아볼 수 있습니다.
str.append(10u,'d'); //appends character d 10 times

문자를 추가하고 싶은 횟수에 대해 10u가 아닌 10u를 썼다는 것을 주목하십시오. 10을 어떤 숫자로 대체하십시오.

보충적인 답변, 왜냐하면 분명히 이 답변은 많은 찬성표를 가진 답변은 다음을 사용할 것을 제안하기 때문입니다.push_back('c')다른 사람은 하지 말라고 하고 있습니다.두 답변 모두 좀 오래됐으니 업데이트를 해보겠습니다.

GNU에 의한 STL, libstdc++을 사용하여, 다음의 5가지 방법을 추가하는 수행.char에 이르기까지std::string테스트 예정:str.append(),str += 'c',str.resize(str.size() + 1, 'c'),str.push_back('c'),그리고.str.insert(str.end(), 1, 'c').

작업 중에 사용되는 최소 시간을 기준으로 하면 다음과 같은 결과가 결과입니다.

params \ cpu_time (4dp) append() += resize() push_back() insert()
optim = 없음
컴파일러 = Clang 11.0
std = c++11
2.6255
1.1t
2.4826
t
3.3396
1.3t
2.4759
t
4.5967
2t
optim = 없음
컴파일러 = Clang 15.0
std = c++20
14.1841
1.5톤
9.3077
t
15.7846
1.7t
9.7907
1.1t
27.1050
2t
optim = O3
컴파일러 = Clang 11.0
std = c++11
19.1018
2t
9.9812
t
25.1597
2.5t
10.0466
t
17.5578
2t
optim = O3
컴파일러 = Clang 15.0
std = c++20
9.9465
t
9.8468
t
9.9519
t
9.8686
t
9.9145
t

+=연산자와push_back()지속적으로 가장 빠른 방법이며, 그 다음이 됩니다.append()(1.1t - 2t),resize()(1.3t - 2.5t) 및insert()(2t)

push_back을 사용하는 경우 문자열 생성자에 대한 호출이 없습니다.그렇지 않으면 주조를 통해 문자열 개체를 만든 다음 이 문자열의 문자를 다른 문자열에 추가합니다.작은 캐릭터에 너무 많은 문제 ;)

언급URL : https://stackoverflow.com/questions/1472048/how-to-append-a-char-to-a-stdstring

반응형