2016-03-26 3 views
-1
string letter; 
    char words[5] = { 'd','o','g','s','a'}; 
    for (char i = 0; i < 5; i++) 
    { 
     cout << words[i] << " "; 
     cout; 
    } 
    cout << "enter letter: "; 
    cin >> letter; 
    (words.find(letter)); 

    int position= words.find(letter); 
    cout << "position is " << position+ 1 << endl; 


bool binarySearch (char usedLetters[], int numGuessedLetters, char guess) 
{ 

    int length = sizeof(usedLetters)/sizeof(usedLetters[0]); 
    cout << length << endl; 

    int first = 0; 
    int last = length - 1; 
    int mid; 

    while (first <= last) 
    { mid = (first + last)/2; 
     if (usedLetters[mid]== guess) 
      return true; 
     if (usedLetters[mid] > guess) 
      last = mid - 1; 
     else 
      first = mid + 1; 
    } 
    return false; 
} 

Я пытаюсь найти массив. я хочу иметь возможность ввести письмо и получить заданное положение письма. На данный момент он не работает. Я получаю ошибку под обоими словами, ошибка говорит «char words [14] Ошибка: expersion должен иметь тип класса. Любые предложения о том, как заставить этот код работать. Дополнение есть способ реализовать этот бинарный поиск? полезныеУказание на индексацию

+0

char [] не имеет функций. можете ли вы опубликовать код поиска? – elyashiv

+0

Вы пытаетесь найти строку, а не одну букву (хотя строка содержит только одну букву). – Galik

ответ

2

C++ способ будет использовать std::string вместо char[], как это:

std::string letter; 
    std::string words = "dogsa"; 
    std::cout << "enter letter: "; 
    std::cin >> letter; 

    int position = words.find(letter); 
    std::cout << "position is " << position + 1 << std::endl; 

Если вы суммируется с char[] по какой-то причине, то вы всегда можете конвертировать это значение в std::string следующим образом:

std::string letter; 
    char words[5] = { 'd','o','g','s','a'}; 
    std::cout << "enter letter: "; 
    std::cin >> letter; 
    std::string sentence (words,5); 
    int position = sentence.find(letter); 
    std::cout << "position is " << position + 1 << std::endl; 

или вручную перебирать массив, например:

std::string letter; 
    char words[5] = { 'd','o','g','s','a'}; 
    std::cout << "enter letter: "; 
    std::cin >> letter; 
    for (int i = 0; i<5; i++) { 
    if (words[i] == letter[0]) 
     std::cout << "position is " << i + 1 << std::endl; 
    } 
-1

Вы не можете позвонить найти на массив символов.

(words.find(letter)); // Not correct 

Основываясь на пути слов заявил, что не будет работать.

0

Вы не можете написать words.find(letter);. слова это массив, и массив не является объектом. Вы должны написать функцию, которая выполняет поиск буквы и возвращает ее позицию ,

2

Использование std::find:

auto pos = std::find(std::cbegin(words), std::cend(words), 's'); 
if (pos != std::cend(words)) { 
    std::cout << "found : '" << *pos 
       << "' at position: " << std::distance(std::cbegin(words), pos); 
} 
0

использовать существующие библиотеки, это быстрее, безопаснее и более читаемым.

Вы можете использовать std::find и получить позицию вы можете вычесть результат из find с результатом от begin():

int main() 
{ 
    vector<char> vec { 'd', 'o', 'g', 's', 'a' }; 
    auto to_find = 'g'; 
    auto result = find(cbegin(vec), cend(vec), to_find); 

    if (result != cend(vec)) 
     cout << "Index: " << (result - cbegin(vec)) << '\n'; 
    else 
     cout << "Not found" << '\n'; 
} 

Если ваш компилятор не поддерживает C++ 14, вы можете использовать begin() & end() или vec.begin() & vec.end() вместо этого.

Смежные вопросы