Проверить, доступен ли каждый символ в строке в массиве c ++ - PullRequest
0 голосов
/ 19 июня 2020

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

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

Я хочу, чтобы он возвращал логическое значение true или false если каждый символ в строке «слово» содержится в массиве «букв» (в данном случае истина), а строка «слово2» - как ложь. Есть идеи или предложения? Я новичок в c ++.

Ответы [ 4 ]

0 голосов
/ 19 июня 2020
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";
  }  
}
0 голосов
/ 19 июня 2020

Эффективное решение - создать логический массив длиной 256 (количество возможных символов) и инициализировать его значением 0. Этот массив покажет, присутствует ли определенный символ в вашей строке букв или нет.

После этого мы можем перебрать вашу строку «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;
}

Надеюсь, это поможет.

0 голосов
/ 19 июня 2020

Вы можете получить доступ к каждому символу в строковых объектах, используя оператор [], точно так же, как доступ к c -строкам. Или "at" метод строковых объектов.

Таким образом, вы можете иметь вложенные для l oop, один для длины слова, а другой для длины буквы.

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
}

Я думаю, что это должно работа.

0 голосов
/ 19 июня 2020
#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...