Сравнение символьного литерала с Std :: String в C ++

Я хотел бы сравнить символьный литерал с первым элементом строки, чтобы проверить наличие комментариев в файле. Зачем использовать символ? Я хочу превратить это в функцию, которая принимает символьную переменную для комментария. Я не хочу разрешать строку, потому что хочу ограничить ее длиной до одного символа.

Имея это в виду, я предположил, что самым простым способом было бы обратиться к символу и передать его в std :: функция сравнения строки. Однако это дает мне непредвиденные результаты.

Мой код выглядит следующим образом:

#include <string>
#include <iostream>

int main ( int argc, char *argv[] )
{
  std::string my_string = "bob";
  char my_char1 = 'a';
  char my_char2 = 'b';

  std::cout << "STRING : " << my_string.substr(0,1) << std::endl
        << "CHAR : " << my_char1 << std::endl;
  if (my_string.substr(0,1).compare(&my_char1)==0)
    std::cout << "WOW!" << std::endl;
  else
    std::cout << "NOPE..." << std::endl;

  std::cout << "STRING : " << my_string.substr(0,1) << std::endl
        << "CHAR : " << my_char2 << std::endl;
  if (my_string.substr(0,1).compare(&my_char2)==0)
    std::cout << "WOW!" << std::endl;
  else
    std::cout << "NOPE..." << std::endl;

  std::cout << "STRING : " << my_string << std::endl
        << "STRING 2 : " << "bob" << std::endl;
  if (my_string.compare("bob")==0)
    std::cout << "WOW!" << std::endl;
  else
    std::cout << "NOPE..." << std::endl;
}

Дает мне ...

STRING : b
CHAR : a
NOPE...
STRING : b
CHAR : b
NOPE...
STRING : bob
STRING 2 : bob
WOW!

Почему функция считает, что подстрока и символ не совпадают. Какой самый короткий способ правильно сравнить символы и std: Когда я говорю «кратчайший», я имею в виду это из-за желания кодировать красноречие. Пожалуйста, обратите внимание, это не домашнее задание. Я кандидат наук в области химического машиностроения и занимаюсь программированием как часть независимых исследований. Один из моих последних вопросов был реклассифицирован как «домашняя работа» пользователем msw (который также сделал грубое замечание), когда я спросил об эффективности, которую я рассматривал на границе злоупотребления. Мой код может или не может быть повторно использован другими, но я пытаюсь сделать его легким для чтения и сопровождения. У меня также есть странное желание сделать мой код настолько эффективным, насколько это возможно. Отсюда вопросы об эффективности и красноречии.

5
задан Community 23 May 2017 в 12:08
поделиться