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

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

Войти
Регистрация
Восстановить пароль
 
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
#1

string - C++

16.08.2011, 20:13. Просмотров 591. Ответов 10
Метки нет (Все метки)

народ я вот решаю задачу .. вводишь в файл 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;
                       
                       }


у мя выводит квадратик . в чем ошибка?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 20:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос string (C++):

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()? - C++
Понятное дело, что всё обсуждение будет вертеться вокруг аналога NULL. char* f_0 () { return NULL; } char** f_1 () { ...

Как используя C-String а потом и String class варьировать вывод? - C++
Дана задача: при вводе полного И.О.Ф. (в таком порядке) выводить Ф, И и О(только первую букву и .). И если О не задано - выводить только...

Как преобразовать char* в string и вывести переменную string на экран? - C++
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Где и почему используют ту или иную строку std::string, char[], System::String^ ? - C++
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные? - C++
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать его как указатель на данные? Заранее спасибо!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
16.08.2011, 20:21 #2
для начала это
C++
1
if(kla[i]=s[0])
заменить на
C++
1
if(kla[i]==s[0])
1
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.08.2011, 20:22 #3
18 строка - "==", а не "=".
1
Сыроежка
Заблокирован
16.08.2011, 20:22 #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])
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:29  [ТС] #5
спасибо большое)) незаметил))

Добавлено через 1 минуту
если q ввести не пашит((
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.08.2011, 20:35 #6
Потому что после того, как найдено совпадение, нужно выходить из цикла. Иначе вы найдёте первую q, пойдёте в цикле дальше по списку букв, найдёте последнюю q, завершите цикл (потому как пройдена вся строка) и попытаетесь вывести следующую за найденным индексом букву. Но была найдена последняя буква в строке (второе вхождение q), и is + 1 находится за границами строки, там мусор. Он и выводится.
1
Сыроежка
Заблокирован
16.08.2011, 20:36 #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];
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:54  [ТС] #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 находится за границами строки, там мусор. Он и выводится.

а как произвести выход из цикла?)
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.08.2011, 20:55 #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;
    }
}
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
16.08.2011, 20:56  [ТС] #10
break?

Добавлено через 19 секунд
спасибо)) все понял))
0
Сыроежка
Заблокирован
16.08.2011, 21:02 #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];
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 21:02
Привет! Вот еще темы с ответами:

Идентификатор string не определён при наличии #include <string> - C++
Я ввёл библеотеку #include &lt;string&gt;, но не смотря на это мне выдаёт ошибку: &quot;индефикатор string не определён&quot;. Объясните, пожалуйста, это...

Заменить использование istringstream на вариант из string или string.h - C++
Как заменить 14 строку функцией из &lt;string&gt; или &lt;string.h&gt; и без &lt;sstream&gt; {deleted} П.5.19.Правил Запрещено создавать темы в виде...

Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина? - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; //using namespace std; class string { private: int...

Ошибка в типе данных 'String' and 'System::String' - C++
Всем привет. помогите, выдает ошибку File1.cpp(40): E2015 Ambiguity between 'String' and 'System::String' ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.08.2011, 21:02
Ответ Создать тему
Опции темы

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