поиск времени в массиве - PullRequest
1 голос
/ 03 мая 2020

там, я новичок в C ++, код ниже должен выводить все элементы, содержащие определенный символ, который я ввел. Я имею в виду, что если я введу символ 'w', он должен вывести "two" и "water" или, если введен s, результат

должен быть "sabit", "sally" и "paris" ». Поэтому я не могу понять, как изменить код.

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int main()
{
    char q;
    int i = 0;
    cout << "bir harf gir" << endl;
    cin >> q;
    string ad[] = {"sabit", "two", "sally", "water", 
                   "mike", "alice", "paris", "david", "martin"};

    for (int i = 0; i < 7; i++)
    {
        if (ad[i][0] == q)
        {
            cout << ad[i] << endl;
        }
    }
    return 0;
}

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Вместо вашего для l oop кажется, что вы имеете в виду следующее

for ( const auto &s : ad )
{
    if ( s.find( q ) != std::string::npos ) std::cout << s << '\n';
}

Вот демонстрационная программа.

#include <iostream>
#include <string>

int main() 
{
    std::string ad[] = 
    {
        "sabit", "two", "sally", "water", "mike", "alice", "paris", "david", "martin"
    };

    char q = 's';

    for ( const auto &s : ad )
    {
        if ( s.find( q ) != std::string::npos ) std::cout << s << '\n';
    }

    return 0;
}

Ее вывод

sabit
sally
paris

Если вы хотите обойти не весь массив, а его часть, то вместо l-1013 *, основанного на диапазоне, вы можете использовать обычное для l oop, как

for ( std::string::size_type i = 0; i < 7; i++ )
{
    if ( ad[i].find( q ) != std::string::npos ) std::cout << ad[i] << '\n';
}
1 голос
/ 03 мая 2020

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

for(int i = 0; i<7; i++)
{
    for(int j =0; j<ad[i].size(); j++){
        if(ad[i][j]==q){
            cout<<ad[i]<<endl;
            break;
        }
    }
}

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

0 голосов
/ 03 мая 2020
if(ad[i][0]==q){
   cout<<ad[i]<<endl;

Здесь выполняется поиск только по первому символу слова.

Приведенный ниже код можно использовать как решение вашей проблемы.

#include<iostream>
#include<string>
#include<bits/stdc++.h>
using namespace std;

int main()
{
char q;
cin>>q;
string ad[]={"sabit","two","sally","water","mike","alice","paris","david","martin"};
for(int i=0;i<sizeof(ad)/sizeof(ad[0]);i++)
{   
int len=ad[i].length();
char ch[len+1];
strcpy(ch, ad[i].c_str());
if(strchr(ch,q)!=NULL)
    cout<<ad[i]<<endl;
}
return 0;
}
...