比较字符数组 [ ] 与字符 *数组 [ ]

Comparing char array[ ] with char *array[ ]?

本文关键字:数组 字符 比较      更新时间:2023-10-16

抱歉,如果标题中的术语不正确,但基本上我想将字符数组与包含字符串文字的字符*数组进行比较。基本上我有一个数组:

char temp[6];
cin.get();
cout << "Enter: ";
cin.getline(temp,6);

和:

char *compare[10] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "};

如何将用户输入到"temp"中的字符串与"比较"数组元素进行比较。如果用户输入:"-..." 它将输入的字符串与"比较"的每个元素进行比较,并检查它是否匹配?我尝试进行比较,但它总是给我一个错误,说" ISO C++禁止指针和整数 [-permissive]|">

您应该始终使用STL的工具。这样你就可以改变这个喧嚣:

char temp[6];
cin.get();
cout << "Enter: ";
cin.getline(temp,6);
char *compare[10] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "};

自:

std::string temp;
std::cout << "Enter: ";
std::getline(std::cin, temp);
std::vector<std::string> compare = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "};

现在要查找输入的字符串是否匹配:

auto iter = std::find(compare.begin(), compare.end(), temp);
if(iter != compare.end(){
     // You have a match!
}

一个完整的例子:

#include <algorithm>
#include <iostream>
#include <vector>
int main(){
    std::string temp;
    std::cout << "Enter: ";
    std::getline(std::cin, temp);
    std::vector<std::string> compare = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "};
    auto iter = std::find(compare.begin(), compare.end(), temp);
    if(iter != compare.end(){
         //To obtain index from an iterator
         auto index = std::distance(iter, compare.end());
         std::cout << "We found a match at: " << index << 'n';
    }
}

如果您对上面的代码有很多疑问,您可能需要查看权威C++书籍指南和列表

您应该尽可能多地使用 STL 功能。在当前方案中,请尝试使用 std::string 而不是 char*std::vector 而不是 char* arr

您可以替换现有代码

char temp[6];
cin.get();
cout << "Enter: ";
cin.getline(temp,6);
char *compare[10] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "};

通过这个

std::string temp;
std::cout << "Enter: ";
std::getline(std::cin, temp);
std::vector<std::string> compare = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "};

现在你可以迭代这个比较向量,比如

for(const auto& iter : compare) {
    // Do the comparison to check whether it's a match or not.
}