1 / 1 / 1
Регистрация: 26.02.2018
Сообщений: 155
1

Найти первое и последнее вхождение заданной буквы в слове

25.10.2018, 20:27. Показов 7937. Ответов 6

Студворк — интернет-сервис помощи студентам
Дана строка. Если в этой строке буква f встречается только один раз, выведите её индекс. Индексы начинаются с 0. Если она встречается два и более раз, выведите индекс её первого и последнего появления. Если буква f в данной строке не встречается, ничего не выводите.

Формат входных данных
Вводится непустая строка. Длина строки не превосходит 100.

Формат выходных данных
Выведите ответ на задачу.

Примеры
входные данные
comfort
выходные данные
3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2018, 20:27
Ответы с готовыми решениями:

Оставить в слове только первое и последнее вхождение каждой буквы
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Найти первое вхождение буквы в слове
Как найти первое вхождение буквы в слове "32fssdkj54" здесь должно быть (позиция) =3. for(int...

Удалить из строки первое и последнее вхождение буквы
Нужно чтобы пользователь вводил текст, в котором буква H встречается минимум два раза. Нужно...

Удалить из строки первое и последнее вхождение заданной подстроки.
1.Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки....

6
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
25.10.2018, 21:14 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
#include <iostream> 
#include <string>
using namespace std;
 
int main()
{ 
    int i=0, count=0, i_first=0, i_last=0;    
    string s;
    cout << "String:\n";
    getline(cin, s);
    
    while (s[i])  
    {    
    if (s[i] == 'f') {count++; i_last=i;
    if(count==1) i_first=i;}
    i++;
    }
    
    if (count==1) cout <<i_first<<endl;
    else if (count!=1&&count!=0) cout <<i_first<<" "<<i_last<<endl;
 
system("pause");
return 0;
}
или применить функции из <string>:
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 <iostream> 
#include <string>
using namespace std;
 
int main()
{ 
    int i=0, count=0;    
    string s;
    cout << "String:\n";
    getline(cin, s);
    
    while (s[i])  
    {    
    if (s[i] == 'f') count++;    
    i++;
    }
    
    if (count==1) cout <<s.find('f')<<endl;
    else if (count!=1&&count!=0) cout <<s.find('f')<<" "<<s.find_last_of('f')<<endl;
 
system("pause");
return 0;
}
0
3579 / 2247 / 407
Регистрация: 09.09.2017
Сообщений: 9,400
26.10.2018, 10:04 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
 
int main(){
  char str[1000];
  char *pos, *lpos;
  char ch = 'f';
  fgets(str, 1023, stdin);
  pos = strchr(str, ch);
  if(pos != NULL){
    printf("%u\t", (unsigned)(pos-str));
    lpos = strrchr(str, ch);
    if(lpos != NULL && lpos != pos)printf("%u", (unsigned)(lpos-str));
  }
  printf("\n");
}
0
Диссидент
Эксперт C
27497 / 17185 / 3784
Регистрация: 24.12.2010
Сообщений: 38,714
26.10.2018, 11:19 4
COKPOWEHEU, Ма-а-аленькое замечание. Если pos!=NULL можно уже не проверять lpos!=NULL
0
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
26.10.2018, 12:27 5
Kalighost, когда менял вывод, тоже не убрал лишнее условие. в 1 и 2 коде вместо
Цитата Сообщение от Yetty Посмотреть сообщение
else if (count!=1&&count!=0)
напишите else if (count!=0)

Добавлено через 48 минут
такой ещё вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string> 
using namespace std;
 
int main()
{
    string s;
    cout <<"String:\n";
    getline(cin, s);
    
    if (s.find('f')==s.find_last_of('f')&&s.find('f')!=string :: npos) cout <<s.find('f')<<endl;
    else if (s.find('f')!=string :: npos) cout <<s.find('f')<<" "<<s.find_last_of('f')<<endl;    
    
system("pause");
return 0;
}
0
786 / 593 / 317
Регистрация: 24.02.2017
Сообщений: 2,090
26.10.2018, 12:33 6
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
#include <iostream>
using namespace std;
 
int main()
{
    char str[100]="comfort",ch[2]="f";
    char *p;
    int index_1,index_2;
 
    p=strstr(str,ch);
    if(p)
      {
         index_1=strlen(str)-strlen(p);
         cout<<index_1<<"  ";
      }
    strrev(str);
    p=strstr(str,ch);
    if(p)
      {
          index_2=strlen(p)-1;
          index_1== index_2 ? cout<<"" : cout<< index_2;
       }
    system("pause");
    return 0;
}
0
3579 / 2247 / 407
Регистрация: 09.09.2017
Сообщений: 9,400
26.10.2018, 14:45 7
Цитата Сообщение от повар1 Посмотреть сообщение
index_1=strlen(str)-strlen(p);
извращение
Цитата Сообщение от повар1 Посмотреть сообщение
strrev(str);
еще более дикое извращение
Это что, для поиска юникодных символов? Неужели решения попроще не нашлось?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 14:45
Помогаю со студенческими работами здесь

Заменить в каждом слове первое вхождение буквы 'y'
Просьба помочь решить задачу. Заменить в каждом слове первое вхождение буквы 'y', если такое...

Заменить в каждом слове первое вхождение буквы ‘у’,
Помогите с написанием программы. Учусь заочно, теории по данной теме не дали вообще! Нужна как...

Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки
2.*Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки. 3.*Все...

Найти первое и последнее вхождение символа
Дана строка, слова в которой разделены хотя бы одним пробелом. Найти первое и последнее вхождение...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru