Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Обработка текста


Автор: Phoenix13 12.3.2010, 11:22
Как сделать так чтобы инструкция if проверяла не конкретную по счёту букву а все сообщение на наличие в ней искомой буквы?

Код

#include <iostream>                                             
#include <cstring>                                              
#include <cstdio>                                                                                          
#include <string.h>

using namespace std;                                           
                                                                                                 
const int ALPHABET_SIZE = 34;                                   
const char alphabet[ALPHABET_SIZE]="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 


int main()                                                     
{  
char a='a';      
int i=3;
char massage[120];                                               
setlocale(LC_ALL, "Russian");                                  
cout<<"Введите ссообщение: ";                                   
gets(massage);                

cout<<"Зашифрованное сообщение: ";
if (a==massage[i])
{
cout<<"ABV";
}
else
{
    cout<<massage[i];
}
 
cin.get();                                                     
}  

Может как-то через цикл for это можно сделать?

Автор: bsa 12.3.2010, 11:32
Цитата(Phoenix13 @  12.3.2010,  11:22 Найти цитируемый пост)
Может как-то через цикл for это можно сделать? 
можно конечно, если хочется изобрести велосипед. А если не хочется, то можно использовать функции strchr() (для си строк) и std::find или std::string::find.

Кстати, подключать одновременно string.h и cstring смысла нет никакого, так как cstring сам подключает string.h и заворачивает стандартные функции в пространство имен std.
ты используешь, setlocale, но у тебя нет #include <clocale>.

Автор: Phoenix13 12.3.2010, 11:51
Я новичек, если можно пример. 
smile 

 И насчет Setlocate, почему cout выводит слова на русском в консоли, а когда я вписываю на русском что-либо, то он возвращает иероглифы? Можно ли это исправить?

Автор: bsa 12.3.2010, 11:56
Цитата(Phoenix13 @  12.3.2010,  11:51 Найти цитируемый пост)
Я новичек, если можно пример. 
пример чего? не знаешь как вызывать функцию с двумя параметрами, один из которых строка, а второй символ? Или ты вообще не знаешь, сколько у нее параметров? http://www.manpagez.com/man/3/strchr/

Автор: Phoenix13 12.3.2010, 12:03
С функциями незнаком((

Автор: Ozerich 12.3.2010, 12:09
Вот тебе самописная функция поиска и цикл for
Код

#include <string>
#include <iostream>
#include <clocale>

using namespace std;
                                                                                                 
bool find_letter(string &s, char a)
{
    for(int i = 0; i < s.size(); i++)
        if(s[i] == a)
            return true;
    return false;
}

int main()                                                     
{  
char letter;
string message;
setlocale(LC_ALL, "Russian");                                  
cout<<"Введите сообщение: ";                                   
cin >> message;      
cout<<"Введите букву: ";                                   
cin >> letter;      
if(find_letter(message,letter))
cout << "Буква такая есть";
else cout <<" Буквы нету";
cin.get();                                                     
}  

Автор: Phoenix13 12.3.2010, 12:33
Ozerich
, спасибо!! smile  Как всегда чётко по теме) Только ещё хочется понять как работают отдельные моменты.
find_letter это название функции которая начнёт выполняться в if.  
Код

if(find_letter(message,letter))

Как работает само (message,later)? Я имею ввиду и алгоритм и синтаксис.

Автор: Ozerich 12.3.2010, 12:37
Цитата

Как работает само (message,later)? Я имею ввиду и алгоритм и синтаксис. 


это параметы которые передаются в функцию. 1-ый параметр это само сообщение, 2-ой - буква. Функция возвращает true, если буква содержится в сообщение, иначе возвращает false

Автор: Phoenix13 12.3.2010, 12:43
Код

bool find_letter(string &s, char a)
{
    for(int i = 0; i < s.size(); i++)
        if(s[i] == a)
            return true;
    return false;
}

А здесь 
Код

(string &s, char a)
как это работает?
И ещё это не очень аонятно
Код

for(int i = 0; i < s.size(); i++)
        if(s[i] == a)


Explain, please)

Автор: Ozerich 12.3.2010, 12:48
Код

bool find_letter(string &s, char a)

Это уже сама функция. 
Здесь : if(find_letter(message,letter)) функция вызывается а тут : bool find_letter(string &s, char a) идет описание её(что она должна делать)

Код

for(int i = 0; i < s.size(); i++)
        if(s[i] == a)


Проходим циклом по каждому символу в строке и во второй строке условие : Если текущий символ равен тому который мы ищем то функция завершается успешно

Автор: Phoenix13 12.3.2010, 12:59
А можно чуть по подробнее? Про то что циклом проходим понятно. 
Непонятно как работает это:
Код

(string &s, char a)

и вот это:
Код

i < s.size(); 

Автор: Ozerich 12.3.2010, 13:07
i < s.size(); 
значение переменной i меньше длины текста    
(string &s, char a)
это параметры для функции. первый параметр s типа string(строка)(амперсанд можно убрать) и второй параметр а типа char(символ)

Автор: Phoenix13 12.3.2010, 13:18
как я понимаю size() стандартная функция, которая определяет длину строки?

Автор: Ozerich 12.3.2010, 13:20
Цитата(Phoenix13 @ 12.3.2010,  12:18)
как я понимаю size() стандартная функция, которая определяет длину строки?

Да. Так и есть. Но эта функция только в STL строках  smile
В С-строках функция strlen(s)

Автор: Phoenix13 12.3.2010, 13:53
А в чём разница между строками С и STL smile 

Автор: Ozerich 12.3.2010, 14:04
Цитата(Phoenix13 @ 12.3.2010,  12:53)
А в чём разница между строками С и STL smile

А тебе не надоело?
Может возьмёшь учебник и почитаешь, а то задаёшь такие вопросы, ответы на которых на первых страницах учебника написаны.

Последний раз отвечаю на подобного рода вопросы:
С - строка это массив символов оканчивающийся '\0'.
В С++ есть STL, библиотека которая облегчает кодинг на С++. Там есть реализация строк. Вот это и называется STL строка.

В следующий раз буду отправлять к учебнику и гуглу  smile 
А если хочешь чтобы тебе катали лабу одну за другой без твоего участия, то готовь WMZ и стучи в асю smile 

Автор: Phoenix13 13.3.2010, 02:00
спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)