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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 19:49   #1
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию Строки в С++

Нарыл в нете такую задачу. Может кто-нибудь показать пример написания на C++?
Цитата:
Дана строка, оканчивающаяся точкой, содержащая слова, разделенные между собой пробелами. Вывести на экран слова без повторяющихся букв, которые отличны от последнего.
Т.к. строка это массив то можно сравнивать каждый символ до 0-го элемента, но вот как пройти в таком случае к следующему "слову"
ПР. for(i=0;s[i]==0;i++)
if (s[i]!=s[i+1]) ...?

Последний раз редактировалось ReaktiV; 04.05.2010 в 19:52.
ReaktiV вне форума Ответить с цитированием
Старый 04.05.2010, 19:59   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

уже какой раз я тебе похожие задачи решаю
Вот тебе функция которая делит строку на массив слов.
Дальше сам?
Код:
bool isLetter(char ch)
{
	return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));
}

vector<string> getWords(const string & s)
{
	vector<string> words;
	string curword;
	for(int i = 0; i < s.size(); i++)
	{
		if(isLetter(s[i]))
			curword.push_back(s[i]);
		else if(!curword.empty())
		{
			words.push_back(curword);
			curword.clear();
		}
	}
	if(!curword.empty())
		words.push_back(curword);
	return words;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 04.05.2010, 20:06   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Чтобы пройтись по словам надо идти по строке пока не встретится символ отличный от пробела - это будет слово. Далее бежим по строке пока не встретится пробел.
Код:
int size = (int)str.size();
for(int i=0; i<size; i++) {
     if(str[i] != ' ') {  // нашли слово
        for(; i<size && str[i] != ' '; i++) {} // бежим по слову и чето с ним делаем
     }
}

Последний раз редактировалось NiCola999; 04.05.2010 в 20:12.
NiCola999 вне форума Ответить с цитированием
Старый 04.05.2010, 20:08   #4
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Цитата:
уже какой раз я тебе похожие задачи решаю
Мне? Похожие? ну я такую в первый раз встретил. Всё равно спасибо.
Что-то вообще всё по новому...
ReaktiV вне форума Ответить с цитированием
Старый 04.05.2010, 20:13   #5
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Цитата:
Что-то вообще всё по новому...
тут STL массивы и строки, улавливай суть алгоритма и постарайся дальше сам пройти по массиву слов и сделать то что надо в задании.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 04.05.2010, 20:35   #6
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Что значит STL?
ReaktiV вне форума Ответить с цитированием
Старый 04.05.2010, 20:37   #7
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

http://ru.wikipedia.org/wiki/STL
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 05.05.2010, 19:22   #8
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Вот я решил сам всё таки
Цитата:
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
int i,j,k=0,m,n;
char str[256];
const int len=81;
char line[len], str1[256];
CharToOem("введите строку и поставьте точку\n", str);
cout<< str;

// cin>>line;
do
{ cin>>str1; m=strlen(str1);
for(i=0;i<m;i++)
putch(str1[i]);
//cout<<str1;
}while(str1[m]!='.');
do
{ cin>>line; n=strlen(line);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(line[i]==line[j]) k=1;
if(!k)
{ k=0;
for (i=0; i<n; i++)
if(line[i]!=str1[i]) k=1;
if(k) cout<<line;
}
}while(line[n]!='.');


system("PAUSE");
return EXIT_SUCCESS;
}
Но с вводом и выводом косяк какой то.
ReaktiV вне форума Ответить с цитированием
Старый 05.05.2010, 20:57   #9
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Ничего ты не решил... Ты считываешь по одному слову, выводишь на экран но не сохраняешь их нигде.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 05.05.2010, 23:39   #10
Crudelis
Пользователь
 
Аватар для Crudelis
 
Регистрация: 05.04.2010
Сообщений: 56
По умолчанию

данные в строки вводится через gets(line) а не через cin
сout<<"Изучаю программирование" точка с запятой
Crudelis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27