Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
1

Найти в заданной строке второе вхождение буквы f и вывести на консоль индекс этого вхождения

22.07.2017, 12:02. Показов 12080. Ответов 15
Метки нет (Все метки)

Даны условия:" Дана строка. Найдите в этой строке второе вхождение буквы f и выведите индекс этого вхождения. Если буква f в данной строке встречается только один раз, выведите число -1, а если не встречается ни разу, выведите число -2. Индексы нумеруются с нуля."

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
 using namespace std;
 
 int main (){
     string a;
     cin >> a;
     vector <string> d = {a};
     int c = 1;
     for (auto d : a){
     if ( d == 'f') {
          c+=1;
     }
     }if (c == 3){
                      c+=0;
                     cout << c;
 
              }else  if (c == 2){
              c-=3;
              cout << c;
          } else if (c==1){
              c-=3;
              cout << c;
          }
 
 
 
return 0;
 
 
 
      }
пользователь вводит сначала слово coffee затем car , а затем comfort результаты данных манипуляций должны быть 3 -2 и -1 соответственно. Почему мой код не проходит проверку? Нарушаются ли условия задачи? Если да то какие? А то я уже даже не знаю что и делать. надеюсь на вашу помощь
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2017, 12:02
Ответы с готовыми решениями:

В каждой строке найти минимальный элемент, затем среди них найти максимальное и вывести на экран индекс этого элемента
Здравствуйте! Помогите, пожалуйста, с задачей: В двумерном массиве все числа различны. В каждой...

Удвоить каждое вхождение заданной буквы в строке
Удвоить каждое вхождение заданной буквы в строке. #include&lt;iostream&gt; #include&lt;cstring&gt; using...

Удвоить каждое вхождение заданной буквы в строке
Помогите пожалуйста) ^_^ Удвоить каждое вхождение заданной буквы в строке.

Найти и вывести на консоль символы, наиболее часто встречающиеся в заданной строке
В тексте найти и напечатать символы, встречающиеся наиболее часто. Помогите !

15
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
22.07.2017, 12:11 2
Цитата Сообщение от Albatrosso Посмотреть сообщение
Почему мой код не проходит проверку?
Потому что Вам нужно
Цитата Сообщение от Albatrosso Посмотреть сообщение
выведите индекс этого вхождения
а Вы этого не делаете, т.е. если я введу fff, у вас ответ выдаст 3, хотя должно быть 2.
1
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
22.07.2017, 12:37  [ТС] 3
А если так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
 using namespace std;
 
 int main (){
     string a;
     cin >> a;
     vector <string> d = {a};
     int c = -1;
     for (auto d : a){
     if ( d == 'f') {
          c+=1;
 
     }
     } if (c == 1){
          int c1 = 3;             ;
                     cout << c1;
 
              }else  if (c == 0){
              int c2 = -1;
              cout << c2;
          } else if (c==-1){
              int c3 = -1;
              cout << c3;
          }if (c >= 2){
              cout << c;
          }
 
 
 
return 0;
 
 
 
      }
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
22.07.2017, 12:49 4
Цитата Сообщение от Albatrosso Посмотреть сообщение
А если так?
введите aaaaaaff
0
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
22.07.2017, 12:53  [ТС] 5
А вот тут случай другой, согласно таблице которая идет в приложениях к задаче, где указаны вводимые и выводимые значения, то при вводе слова coffee компилятор должен выводить число 3.
а в ааааааffтоже две буквы f.
0
0 / 1 / 0
Регистрация: 26.02.2017
Сообщений: 7
22.07.2017, 12:54 6
Цитата Сообщение от mat_for_c Посмотреть сообщение
а Вы этого не делаете, т.е. если я введу fff, у вас ответ выдаст 3, хотя должно быть 2.
если будет введено "fff" то должно вывести 1)
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
22.07.2017, 12:54 7
значит индекс от 0 идет. иногда индекс в с++ и тот, что в задаче, не совпадает Albatrosso, суть в том, что у Вас логика не правильная
0
68 / 67 / 52
Регистрация: 28.10.2015
Сообщений: 388
22.07.2017, 15:23 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    string str = "adrftfg";
    
    string::iterator it=find(str.begin(), str.end(), 'f');
    if (it == str.end())
        cout << "-2" << endl;
    else
    {
        it = find(next(it), str.end(), 'f');
        if (it == str.end())
            cout << "-1" << endl;
        else
            cout << it-str.begin() << endl;
    }
    
    system("pause");
    return 0;
}
Добавлено через 26 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int f(const string&str)
{
    int s = 0;
    for (size_t i = 0; i < str.size(); i++)
    {
        if (str[i] == 'f') {
            s++;
            if (s == 2)
                return i;
        }
    }
    if (!s)
        return -2;
    else if (s)
        return -1;
}
int main()
{
    string str = "adrtg";
    cout << f(str) << endl;
    system("pause");
    return 0;
}
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
22.07.2017, 15:30 9
Цитата Сообщение от mat_for_c Посмотреть сообщение
значит индекс от 0 идет. иногда индекс в с++ и тот, что в задаче, не совпадает
В С++ всегда идет индекс от нуля.
0
Эксперт С++
1601 / 932 / 778
Регистрация: 06.02.2016
Сообщений: 2,425
Записей в блоге: 29
22.07.2017, 16:11 10
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
    const string s{"ssaasassfddffff"};
    auto it=find(next(find(s.cbegin(),s.cend(),'f')),s.cend(),'f');
    cout<<distance(s.cbegin(),it);
    return 0;
}
0
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
22.07.2017, 18:59  [ТС] 11
тогда другой вопрос, как этот самый индекс вывести?
0
18 / 18 / 20
Регистрация: 07.02.2016
Сообщений: 87
29.09.2017, 15:35 12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main(){
    string str;
    cin >> str;
    int cnt = count(str.begin(),str.end(),'f');
    if (cnt == 1) cout << -1;
    else if (cnt == 0 ) cout << -2;
    else cout <<  str.find('f');
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8170 / 5020 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
29.09.2017, 15:43 13
flash_back, так выведет индекс первого вхождения.
Должно быть так:
C++
13
else cout << str.find('f', str.find('f') + 1);
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
int Find2Pos(const std::string &str, const char c)
{
    size_t pos = str.find(c);
    if (pos == std::string::npos)
        return -2;
    pos = str.find(c, pos + 1);
    return (pos == std::string::npos ? -1 : pos);
}
 
int main()
{
    const std::string str = "abcfjkjkjkljlfasdasdasffff";
    std::cout << Find2Pos(str, 'f');
}
1
18 / 18 / 20
Регистрация: 07.02.2016
Сообщений: 87
29.09.2017, 16:11 14
Да, верно. Спасибо. Условие невнимательно прочел.

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main(){
    string str;
    cin >> str;
    int cnt = count(str.begin(),str.end(),'f');
    if (cnt == 1) cout << -1;
    else if (cnt == 0 ) cout << -2;
    else cout << str.find('f') + (str.substr(str.find('f')+1,str.size()-1)).find('f') + 1;
    return 0;
}
0
0 / 0 / 0
Регистрация: 10.08.2020
Сообщений: 1
10.08.2020, 19:58 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
using namespace std;
 
int main() {
string a;
cin >> a;
int j = 0;
for(int i = 0; i<a.size(); ++i) {
    if(a[i] == 'f') {
        ++j;
    if (j == 2) {
        cout << i;
        }
    }
}
    if (j == 0) {
        cout << -2;
        }
    if (j == 1) {
        cout << -1;
            }
}
0
AndryS1
10.08.2020, 20:08     Найти в заданной строке второе вхождение буквы f и вывести на консоль индекс этого вхождения
  #16

Не по теме:

Redtreatrick, можете не отвечать на темы 3-х летней давности?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2020, 20:08

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Найти в данной строке второе вхождение буквы "f", и вывести индекс этого вхождения
Задача 3 Дана строка. Найдите в этой строке второе вхождение буквы f, и выведите индекс этого...

Преобразовать каждое слово в строке, удалив из него все вхождения первой буквы этого слова
Дана строка, состоящая из символов латинского алфавита, разделенных пробелами (одним или...

Преобразовать каждое слово в строке, удалив из него все предыдущие вхождения последней буквы этого слова
Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими)....

Преобразовать каждое слово в строке, удалив из него все последующие вхождения первой буквы этого слова
Дана строка, состоящая из латинских слов, разделенных пробелами. Преобразовать каждое слово в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.