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

string - C++

Восстановить пароль Регистрация
 
Ferk
 Аватар для Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:13     string #1
народ я вот решаю задачу .. вводишь в файл input.txt латинскую букву...а в файл output.txt выводить должно справа стоящую на клавиатури букву.


вот код:

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
#include <fstream>
#include <string>
using namespace std;
main ()
{
     string kla("qwertyuiopasdfghjklzxcvbnmq");
     string s("");
     int i;
     
     ifstream in("input.txt");
     in>>s;
     in.close();
     ofstream out("output.txt");
     int t=kla.length();
     int is;
     for (i=0;i<t;i++)
     {
         if(kla[i]=s[0])
         {
                        is=i;
                        }
                        }
                        out<<kla[is+1];
    
                       
                       return 0;
                       
                       }


у мя выводит квадратик . в чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lavan
51 / 51 / 1
Регистрация: 21.03.2009
Сообщений: 371
16.08.2011, 20:21     string #2
для начала это
C++
1
if(kla[i]=s[0])
заменить на
C++
1
if(kla[i]==s[0])
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.08.2011, 20:22     string #3
18 строка - "==", а не "=".
Сыроежка
Заблокирован
16.08.2011, 20:22     string #4
Цитата Сообщение от Ferk Посмотреть сообщение
народ я вот решаю задачу .. вводишь в файл input.txt латинскую букву...а в файл output.txt выводить должно справа стоящую на клавиатури букву.


вот код:

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
#include <fstream>
#include <string>
using namespace std;
main ()
{
     string kla("qwertyuiopasdfghjklzxcvbnmq");
     string s("");
     int i;
     
     ifstream in("input.txt");
     in>>s;
     in.close();
     ofstream out("output.txt");
     int t=kla.length();
     int is;
     for (i=0;i<t;i++)
     {
         if(kla[i]=s[0])
         {
                        is=i;
                        }
                        }
                        out<<kla[is+1];
    
                       
                       return 0;
                       
                       }


у мя выводит квадратик . в чем ошибка?
Если я правильно разглядел, то вы вместо оператора равенства ( == ) используете оператор присваивания ( = ) в выражении

C++
1
 if(kla[i]=s[0])
Ferk
 Аватар для Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:29  [ТС]     string #5
спасибо большое)) незаметил))

Добавлено через 1 минуту
если q ввести не пашит((
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.08.2011, 20:35     string #6
Потому что после того, как найдено совпадение, нужно выходить из цикла. Иначе вы найдёте первую q, пойдёте в цикле дальше по списку букв, найдёте последнюю q, завершите цикл (потому как пройдена вся строка) и попытаетесь вывести следующую за найденным индексом букву. Но была найдена последняя буква в строке (второе вхождение q), и is + 1 находится за границами строки, там мусор. Он и выводится.
Сыроежка
Заблокирован
16.08.2011, 20:36     string #7
Цитата Сообщение от Ferk Посмотреть сообщение
спасибо большое)) незаметил))

Добавлено через 1 минуту
если q ввести не пашит((
А что вы хотите, чтобы у вас выдало, если вы введете 'q'? За последней 'q' в вашей строке ничего не следует. То есть вы выходите за границы своего контейнера string kla

Измените свою программу следующим образом: вместо цикла используете метод find класса string

C++
1
2
3
std:;size_t i = kla.find( s[0] );
 
if ( i < rla.size() - 1 )  out << kla[i+1];
Ferk
 Аватар для Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:54  [ТС]     string #8
Цитата Сообщение от Сыроежка Посмотреть сообщение
А что вы хотите, чтобы у вас выдало, если вы введете 'q'? За последней 'q' в вашей строке ничего не следует. То есть вы выходите за границы своего контейнера string kla

Измените свою программу следующим образом: вместо цикла используете метод find класса string

C++
1
2
3
std:;size_t i = kla.find( s[0] );
 
if ( i < rla.size() - 1 )  out << kla[i+1];
мне мало просто изменить)) мне понять хочеться))


Потому что после того, как найдено совпадение, нужно выходить из цикла. Иначе вы найдёте первую q, пойдёте в цикле дальше по списку букв, найдёте последнюю q, завершите цикл (потому как пройдена вся строка) и попытаетесь вывести следующую за найденным индексом букву. Но была найдена последняя буква в строке (второе вхождение q), и is + 1 находится за границами строки, там мусор. Он и выводится.

а как произвести выход из цикла?)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.08.2011, 20:55     string #9
Ferk, оператор break. Надо сделать так:

C++
1
2
3
4
5
6
7
8
9
for (i=0;i<t;i++)
{
    if(kla[i]==s[0])
    {
        is=i;
 
        break;
    }
}
Ferk
 Аватар для Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:56  [ТС]     string #10
break?

Добавлено через 19 секунд
спасибо)) все понял))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 21:02     string
Еще ссылки по теме:

C++ 'string' : undeclared identifier, std::string
Как сравнить введенную string с константой string C++

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
16.08.2011, 21:02     string #11
И все равно вам надо делать проверку, что 1) вы нашли нужный символ; 2) найденный символ не является последним в строке. Конечно в вашем случае найденный символ не будет последним в строке, так как, как я вижу, символ 'q' у вас в строке дублируется, но тем не менее для обощения, когда задается произвольная строка, такую проверку сделать целесообразно. Поэтому даже если делать в цикле, как это сделано у вас, то все равно его следует изменить

C++
1
2
3
4
5
6
7
8
int is, t ;
 
for ( is = 0, t = kla.length() ; is < t; ++is )
{
   if ( kla[is] == s[0] ) break;
}
 
if ( is < kla.length() - 1 ) out << kla[is+1];
Yandex
Объявления
16.08.2011, 21:02     string
Ответ Создать тему
Опции темы

Текущее время: 21:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru