检查字符串中的每个字符是否在数组 C++ 中可用

Check if every character in a string is available in an array c++

我试了好几个小时,还是找不到好的方法,这就是我想做的。

string word = "hello";
string word2 = "hey";
string letters[4] = {"h", "e", "l", "o"};

如果字符串 "word" 中的每个字符都包含在数组 "letters" 中(在本例中为 true)并且字符串 "word2" 为假。有什么想法或建议吗?我是 c++ 的新手。

#include<iostream.h>
#include<conio.h>
#include<ctype.h>

const int MAX = 20

bool check_availability(char word, char letters){
  length_of_letters = sizeof(letters) / sizeof(letters[0])

  for (int i = 0 ; i < length_of_letters ; i++){
    if (letters[i] < word[i] < letters[length_of_letters]) {
      return true
    }
  }
}

int main() {
  clrscr();
  char word[MAX], letters[MAX];
  int lenght;

  cout<<"Please enter a word: ";
  getc(word)

  cout<<"Please enter the length of the array of letters you would be entering: ";
  cin>>length
  for (int i = 0 ; i < length ; i++){
      cin>>letters[i]
  }

  for (int i = 0 ; i < lenght ; i++) {
    res = check_availability(word, letters[i])
    assert(res == true)   //The code will give an assertion error when condition is not satisfied
  }

  return 0;
}

一个有效的解决方案是创建一个长度为 256(可能的字符数)的布尔数组并将其初始化为 0.This 该数组将告诉您字母字符串中是否存在某个字符。

之后,我们可以遍历您的字符串 'word' 以检查该字符是否存在于 'letter' 字符串中。 检查此功能:

bool isContained(string word,string letters){
bool letts[256]={0};
for(int i=0;i<letters.size();i++){
    letts[letters[i]=1;
}
for(int i=0;i<word.size();i++){
    if(!letts[word[i]]){
        return false;
    }
  }
return true;
}

希望对您有所帮助。

您可以使用 [] 运算符访问字符串对象中的每个字符,就像访问 C 字符串一样。或者字符串对象的"at"方法。

所以你可以嵌套 for 循环,一个用于单词的长度,另一个用于字母的长度。

bool f(string word, string* letters, int letters_length) {
    for (int i = 0; i < word.size(); i++) {
        bool flag = false;
        for (int j = 0; j < letters_length; j++) {
            if (word[i] == letters[j][0]) { // compare each word's character and each letters's character
                flag = true;
                break;
            }
        }

        if (!flag) { // if the word's character couldn't be found in letters, return false
            return false;
        }
    }
    return true; // this can be reached only if all the comparison are passed
}

我认为这应该可行。

bool checkLettersIncluded(std::string word, std::string letters)
{
  int includedLetter = 0;
  for(const char c:word)
  {
    for(const char d:letters)
    {
      if(c==d)
      {
        includedLetter++;
        break;
      }
    }
  }
  return includedLetter == word.length();
}


int main() {
  std::string word = "hello";
  std::string word2 = "hey";
  std::string letters = "helo";
  if(checkLettersIncluded(word2, letters))
  {
    std::cout << "All characters available";
  }  
}