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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 22:29   #1
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
Восклицание Задача на С++

Мучаю с ней очень долго, никак не могу справится. Ниже сама задача и код, который уже более или менее похож на правду. Помогите пожалуйста.


Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами. Распечатать каждую строку, заменив каждое слово, начинающееся с заданной буквы на заданное слово.
Вот сама программа, я долго бьюсь с ней, но она так и не заработала.
Код:
#include <iostream>
using namespace std;
#include <conio.h>
#include <stdio.h>
#include <windows.h> 
char str1 [100], str2 [100], bukva[2], slovo[30], temp[1000] ;
int i;
int main()
{SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 cout<<" Первая строка: ";
 gets(str1);
 cout<<" Вторая строка: ";
 gets(str2);
 cout<<" Введите первую букву с которой будут начинаться слова ";
 gets(bukva);
 cout<<" Введите   слово которым заменятся найденые слова ";
 gets(slovo);
 for(i=0;i<strlen(str1);i++)
	 strncpy(temp, str1+i,1);
 cout<<"Первая строка с произведенной заменой";
 if (!strcmp(temp,bukva))
	 cout<<slovo;
 else 
	 for(i=0;i<strlen(str1); i++)
	 do cout<<temp[i];
	 while ((!strncmp(temp,str,i+1))||(!strncmp(temp,0,i+1)));
for(i=0;i<strlen(str1)+1;i++)
	 strncpy(temp,str1+1,2);
	 if(!strncmp(temp,str,i+1)&!strncmp(temp,bukva))
		 cout<<slovo;
	 else 
	 for(i=0;i<strlen(str1);i++)
	 do cout<<temp[i];
	 while ((!strncmp(temp,str,i+1))||(!strncmp(temp,0,i+1)));
//тоже самое для второй строки
_getch();}

Последний раз редактировалось kryliaangela; 13.01.2012 в 01:58.
kryliaangela вне форума Ответить с цитированием
Старый 13.01.2012, 14:12   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Ну зачем же так усложнять? Есть же STL, в конце-концов...
Вот, например, такой вариант:
Код:
#include <iostream>
#include <iterator>
#include <sstream>

using namespace std;

int main()
{
    string str, word;
    char ch;
    getline(cin, str);
    cin >> ch;
    cin >> word;
    stringstream ss(str);
    for (istream_iterator<string> It(ss); It != istream_iterator<string>(); ++It)
        if ((*It)[0] == ch)
            cout << word << " ";
        else
            cout << *It << " ";
    cout << endl;
}
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 13.01.2012, 15:01   #3
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

Ну я новичок в этом деле, язык я еще не настолько хорошо знаю, моя программа была построена просто на логике, т.е. я не уверена в использовании некоторых функций. Вся задача сводится к тому, что надо создать алгоритм нахождения пробела и первой буквы, если буква заданная, то вывести данное слово вместо имеющегося, и продолжить проверять строку.
Этот кусок программы будет повторяться раз 5.
kryliaangela вне форума Ответить с цитированием
Старый 13.01.2012, 15:31   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от kryliaangela Посмотреть сообщение
Ну я новичок в этом деле, язык я еще не настолько хорошо знаю, моя программа была построена просто на логике, т.е. я не уверена в использовании некоторых функций. Вся задача сводится к тому, что надо создать алгоритм нахождения пробела и первой буквы, если буква заданная, то вывести данное слово вместо имеющегося, и продолжить проверять строку.
Этот кусок программы будет повторяться раз 5.
Тем более.
Если уж начинать писать на С++, то надо использовать и соответствующие языку стандарты...
Ну, не знаешь ты итераторов -- это вполне нормально для начинающего.
Но зачем использовать С-ные нуль-строки, если в С++ есть тип string вместе с соответствующими функциями?
А алгоритм останется тем же. Из строки (которая должна начинаться не с пробела) вырезаешь (то есть, строка уменьшается на это слово + пробел) слово (до пробела), проверяешь первую букву и печатаешь либо это же слово, либо замену. Все это в цикле, пока не окончится строка.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 13.01.2012, 15:57   #5
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

как я понимаю string это поток, может быть вопрос глупый, но я не очень понимаю, как ограничить это 100 символами?

и не могли бы вы объяснить принцип действия вот этого куска
stringstream ss(str);
for (istream_iterator<string> It(ss); It != istream_iterator<string>(); ++It)

*It это указатель if ((*It)[0] == ch)? и почему он берется от 1 символа?

пардон за такое количество вопросов, просто нам этого не объясняли, а разбираться в описании функции на английском не очень легко
kryliaangela вне форума Ответить с цитированием
Старый 13.01.2012, 16:34   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
как я понимаю string это поток, может быть вопрос глупый, но я не очень понимаю, как ограничить это 100 символами?
неправильно понимаешь.
string -- это строка. в отличие от с-ной null-terminated string (char[100], например), не имеет в конце нуль-терминатора ('\0').
поток -- это stringstream.
то, что ты просишь объяснить -- это итераторы доступа, но про них мы уже не говорим.
я имел в виду библиотеку <string> и, в частности, ее методы
find_first_of(),
copy и
substr.
Этого, по идее, должно хватить...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 14.01.2012, 13:08   #7
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

Кстати большое спасибо за помощь, теперь только осталось полностью в тексте программы разобраться
kryliaangela вне форума Ответить с цитированием
Старый 14.01.2012, 13:30   #8
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

я вроде разобралась)

Последний раз редактировалось kryliaangela; 14.01.2012 в 19:08.
kryliaangela вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о стрелках (задача Майхелла) Silly Student Помощь студентам 0 14.12.2011 22:20
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51