比较char和const字符串

时间:2018-03-06 13:56:30

标签: c++

在创建3D引擎的一部分的过程中,我陷入了基本的C ++问题。

#include <iostream>

//Ignore this function
std::string get_replacement(char c) {return "TEEEEEEEST";}

int main() {
    //Declaring some variables
    std::string const& foo = "X";
    std::string str = "FFFFGGGGXFFWEFWXFFFF";
    const int N = 4;    //Amount of iterations
    //These values and types can't be changed
    //----------------------------------------


    //String before changement
    std::cout << "Before: " << str << std::endl;

    for (int i = 0; i < N; i++) {
        for (char c : str) {
            if (c == foo) {     //How to do this????
                str += get_replacement(c);
            } else str += c;
        }   
    }   

    std::cout << "After: " << str << std::endl;

}

问题出在第20行: test.cpp:20:19:错误:'operator =='不匹配(操作数类型是'char'和'const string {aka const std :: __ cxx11: :basic_string的}')

当我用像X&#39;这样的文字字符替换foo时,它可以正常工作。然而,这不是动态的。我试图搜索一个解决方案并尝试了类似.c_str()的内容,但没有成功。

修改 foo的类型无法更改且必须是std :: string const&amp; 因为我使用的是学校库,其中使用该类型读取配置文件。

2 个答案:

答案 0 :(得分:3)

你可以明确表示你只关心第一个角色。

if (c == foo[0]) 

或者将字符转换为字符串(效率较低)。

if (std::string(1, c) == foo)

如果使用非ascii字符串(unicode或其他多字节表示),这两种方法都会失败。

答案 1 :(得分:1)

一些可以处理空字符串的解决方案,但也不涉及动态分配新的std::string(尽管智能实现确实避免了使用小字符串优化的动态分配):

if(foo().size() == 1
&& c == foo.front())

或者

char str[] = {c, '\0'};
if (str == foo)

如果您不介意依赖小字符串优化,那么这可能更简单:

if (std::string{c} == foo)