Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105

string

16.08.2011, 20:13. Показов 939. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2011, 20:13
Ответы с готовыми решениями:

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

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

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

10
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
16.08.2011, 20:21
для начала это
C++
1
if(kla[i]=s[0])
заменить на
C++
1
if(kla[i]==s[0])
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.08.2011, 20:22
18 строка - "==", а не "=".
1
Заблокирован
16.08.2011, 20:22
Цитата Сообщение от 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  [ТС]
спасибо большое)) незаметил))

Добавлено через 1 минуту
если q ввести не пашит((
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.08.2011, 20:35
Потому что после того, как найдено совпадение, нужно выходить из цикла. Иначе вы найдёте первую q, пойдёте в цикле дальше по списку букв, найдёте последнюю q, завершите цикл (потому как пройдена вся строка) и попытаетесь вывести следующую за найденным индексом букву. Но была найдена последняя буква в строке (второе вхождение q), и is + 1 находится за границами строки, там мусор. Он и выводится.
1
Заблокирован
16.08.2011, 20:36
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от Сыроежка Посмотреть сообщение
А что вы хотите, чтобы у вас выдало, если вы введете '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
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.08.2011, 20:55
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  [ТС]
break?

Добавлено через 19 секунд
спасибо)) все понял))
0
Заблокирован
16.08.2011, 21:02
И все равно вам надо делать проверку, что 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2011, 21:02
Помогаю со студенческими работами здесь

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

Как перебрать все элементы в map<string, vector<string>>
Доброго времени суток. Решаю следующую задачу: В файле есть сведения об автомобилях: марка автомобиля, номер и фамилия владельца. ...

Ошибка при присвоении argv[1] переменной string. Как конвертировать к типу string?
&quot;call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type&quot; ...

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru