Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.96
Роман_1985
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
#1

Узнать номер символа в строке. - C++

05.12.2010, 21:20. Просмотров 4006. Ответов 3
Метки нет (Все метки)

Здравствуйте. Помогите, пожалуйста! Задача Подсчитать кол-во символов в строке после последнего вхождения символа <<charg>>. Вот моя программа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    const int max=80;
    int n,j,m=0,kol;
    char charg1;
    cout<<"BBEDUTE CUMBO/I:";
    cin>>charg1;
    cout<<"CUMBO/I:"<<charg1<<endl<<endl;
    char str1[]="Это первая строка";
 
    kol=strlen(str1);cout<<kol<<endl;
    for (j=0;j<kol;j++)
    {if (str1[j]==charg1) n=j;}
    cout<<"HOMEP CUMBO/IA "<<charg1<<": "<<n<<endl;
    for (j=n;j<strlen(str1);j++) m++;
    cout<<"CHIC/IO POC/IE: "<<m;
    return 0;
}
Где {if (str1[j]==charg1) n=j;} усл оператор не срабатывает должным образом, но если вместо charg1 поставить параметр 'p' , всё работает как надо. (Почему?)
Так вот, как можно узнать номер символа charg в строке?

 Комментарий модератора 
Используйте соответствующие теги форматирования кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2010, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Узнать номер символа в строке. (C++):

Узнать позицию символа в строке string - C++
Привет, как узнать индекс символа 'l' в строке string ? string s = &quot;Hello&quot;;

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке - C++
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с...

Поменяйте чётные символы между строками, и после каждого четного символа добавьте его номер в исходной строке - C++
Запросите у пользователя 2 строки длинной от 4 до 20 символов.Поменяйте чётные символы между строками, и после каждого четного символа...

В строке заменить каждый символ «!» числом, равным индексу этого символа в строке - C++
В заданной строке заменить каждый символ «!» числом, равным индексу этого символа в строке. Сделал просто замену символа на любой ...

Найти порядковый номер слова максимальной длины в строке и номер позиции, с которой оно начинается - C++
помогите пожалуйста с программой( среда Visual C ) Дана строка символов, состоящая из произвольного текста, слова разделены пробелами....

Вывести порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается - C++
как вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается ?

3
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
05.12.2010, 21:53 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
    
int main(){
    const int MAX_LEN(256);
    char buf[MAX_LEN], * p, ch;
    
    std::cout << "String: ";
    std::cin.getline(buf, MAX_LEN);
    std::cout << "Character: ";
    std::cin >> ch;
    
    if ( ( p = strrchr(buf, ch) ) == NULL ){
        std::cerr << "Character not found in string!" << std::endl;
        return 1;
    }
    
    std::cout << ( strlen(buf) - (p - buf) - 1 ) << " characters after last " << ch << std::endl;
    
    return 0;
}
1
Роман_1985
1 / 1 / 0
Регистрация: 05.12.2010
Сообщений: 34
05.12.2010, 23:34  [ТС] #3
Спасибо, В этом решении для меня есть незнакомые моменты, поэтому возникли вопросы :
1)почему p-buf возвращает положительное значение?
2)как при вычитании символов получается число?
3)почему в последней формуле нельзя заменить buf на strlen(buf)?
4)почему *p,а не p?
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
05.12.2010, 23:43 #4
Роман_1985, ну давайте по порядку:
Функция strrchr() возвращает указатель на последнее вхождение символа в строку. buf - фактически указатель на первый элемент строки. Соответственно p - buf даёт количество символов между первым и найденным, то есть индекс найденного символа. strlen() возвращает длинну строки. Если от неё отнять количество символов до найденного включительно - получится количество оставшихся символов... Кстати, только-что дошло:
C++
1
std::cout << ( strlen(p) - 1 ) << " characters after last " << ch << std::endl;
2
05.12.2010, 23:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2010, 23:43
Привет! Вот еще темы с ответами:

Вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается - C++
и так, вот условие: дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Вывести на экран порядковый номер...

Найти число пробелов в строке и заменить их на номер по порядку в исходной строке - C++
Задание: Во введенной пользователем строке найти число пробелов и заменить все пробелы на их номер по порядкув исходной строке. Например...

В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке - C++
/*Дана матрица А. В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке. Вывести полученную матрицу.*/ ...

Определить порядковый номер введенного символа - C++
Здраствуйте.Помогите кому не тяжело.Задача такая: Ввести любой символ и определить его порядковый номер, а также указать...


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

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

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