Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2012, 12:41   #1
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос Не могу доделать

вот сама задача:
Дана стpока символов. Пpизнак конца стpоки - символ '\n' (пеpевод стpоки). Стpока состоит из слов, pазделенных пpобелами.
Вывести слова, заканчивающиеся буквой 'а', с поpядковыми номеpами этих слов в исходной стpоке.

вот я код набросал:

Код:
#include <iostream>
#include <string>
using namespace std;
int main()
{
char str[100];
char a = 'a';
int n;
cout << "Enter text " << endl;
gets(str);
n = strlen(str);
for (int i=0; i<n; i++)
// Дальше я не уверен что все правильно делаю 
if(str[i-1] == a)
cout << i << " " << str[i];
else
cout << "NO" << endl;

system("pause");
return 0;
}
Sylar9 вне форума Ответить с цитированием
Старый 25.05.2012, 19:24   #2
zvoronz
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 49
По умолчанию

Код:
for (int i=0; i<n; i++)
if(str[i-1] == a) // вот сдесь сразу ошибка времени выполнения будет так как 0-1 = -1 а такого индекса у массива быть не может
cout << i << " " << str[i];
Во вторых тебе нужно проверять на признак того что конец слова, в простейшем случае это будет просто пробел, в более детальном точка, запятая и др. знаки.
То есть "корова мычит" нужно проверять не просто а а "а ", тоесть то что а стоит в конце слова.
Плюс ко всему этому нужно постоянно запоминать индекс символа начала слова и если в конце окажется что оно удовлетворяет условию то выводить эту подстроку. Так же соответственно ещё нужно подсчитывать кол-во слов.
zvoronz вне форума Ответить с цитированием
Старый 26.05.2012, 12:12   #3
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Вы же подключили <string> почему не пользуетесь?

Если ограничиться латиницей, и тем, что слова заканчиваются только пробелом, тогда:

найдём позицию строки "a " в считанной строке http://cplusplus.com/reference/string/string/find/

while (индекс найден) http://cplusplus.com/reference/string/string/npos/
запомним найденный индекс
идём назад по строке до символа пустого пространства http://cplusplus.com/reference/string/string/at/
запоминаем количество пройденных символов
считываем подстроку в количестве пройденных символов http://cplusplus.com/reference/string/string/substr/
найдём позицию строки "a " в считанной строке http://cplusplus.com/reference/string/string/find/

Последний символ - 'a'?
Да
идём назад по строке до символа пустого пространства http://cplusplus.com/reference/string/string/at/
запоминаем количество пройденных символов
считываем подстроку в количестве пройденных символов http://cplusplus.com/reference/string/string/substr/

P.S. Не уверен, что это оптимальное решение.

Последний раз редактировалось 8Observer8; 26.05.2012 в 12:17.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НЕ могу доделать! FraerFAkk Microsoft Office Access 2 08.04.2012 13:51
Не могу доделать задачу X-REY Паскаль, Turbo Pascal, PascalABC.NET 1 25.10.2011 20:50
не могу доделать лабу) alexander1111 Помощь студентам 0 05.03.2011 14:19
не могу доделать на си VIKA1829 C# (си шарп) 3 27.02.2011 14:40
Не могу доделать ymanety Общие вопросы C/C++ 0 09.11.2010 22:11