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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 22:21   #21
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

2й либо 3й из моих вариантов - на выбор.
Если строка std::string - 4й.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 10.05.2010, 16:02   #22
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

А как будет на равно пробелу?
я вот так написал
if(str1[i]!=' ')
ReaktiV вне форума Ответить с цитированием
Старый 10.05.2010, 17:08   #23
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Так и будет.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 10.05.2010, 17:21   #24
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

ТОгда я не понимаю что здесь не правильно
Цитата:
nulek[0] = '\0';
CharToOem("ââåäèòå ñòðîêó è ïîñòàâüòå òî÷êó\n", str);
cout<< str;
cin.getline(str1,len);
cout<<str1<<"\n";


//CharToOem("íàæìèòå áîëüøóþ äëèííóþ êíîïêó\n", str);
//cout<< str;
//cin.getline(nulek,len);
//cout<<nulek;
m=strlen(str1);
cout<<m;
for(i=0;i<m-1;i++)
if(str1[i]!=' ') line[i]=str1[i];
else strcpy(line,nulek);
cout<<line;
это часть программы
Программа выводит m и потом просто застопоривается.
ReaktiV вне форума Ответить с цитированием
Старый 11.05.2010, 17:35   #25
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

Давайте с начала
дана задача
Цитата:
Дана строка, оканчивающаяся точкой, содержащая слова, разделенные между собой пробелами. Вывести на экран слова без повторяющихся букв, которые отличны от последнего.
Я думаю сделать так
1. Ввести строку с точкой
2. Найти последнее слово.
3. сравнивать буквы в каждом слове и сравнивать эти же слова с последним

Код:
#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=256;
    char line[len], str1[256], nulek[256];
    nulek[0] = '\0';
    CharToOem("введите строку и поставьте точку\n", str);
    cout<< str;
    cin.getline(str1,len);
    cout<<str1<<"\n";
    


    m=strlen(str1);
    cout<<m;
    for(i=0;i<m-1;i++){
    if(str1[i]!=' ') line[i]=str1[i];
    if (str1[i]==' ') strcpy(line,'\0');}  // здесь главная проблема
    cout<<line;                          //здесь попытка вычислить последнее слово
  


     do
    {
    for(i=0; i<m; i++)
    for(j=0; j<m; j++)
    if(str1[i]==str1[j]) k=1;
    if(!k)
      { k=0;
        for (i=0; i<n; i++)
         if(str1[i]!=line[i]) k=1;
         if(k) cout<<str1;                      // здесь сравнее
         
       }   
  }while(str1[i]!='.');
    

    system("PAUSE");
    return EXIT_SUCCESS;
}

Последний раз редактировалось ReaktiV; 11.05.2010 в 17:42.
ReaktiV вне форума Ответить с цитированием
Старый 12.05.2010, 07:47   #26
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

При вводе
asd qwe zxc.
программа выводит
17asd и виснит(((
ReaktiV вне форума Ответить с цитированием
Старый 12.05.2010, 09:41   #27
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

В этой части у тебя точно проблема
Код:
 m=strlen(str1);
    cout<<m;
    for(i=0;i<m-1;i++){
    if(str1[i]!=' ') line[i]=str1[i];
    if (str1[i]==' ') strcpy(line,'\0');}  // здесь главная проблема
    cout<<line;
В line как я понял ты хочешь записать последнее слово, не так ли?
Если так, тогда следующий фрагмент решит проблему:
Код:
    m=strlen(str1);
    cout<<m;   //здесь зачем-то выводим длину строки
    j=0;
    for(i=0;i<m-1;i++)
    {
      if (str1[i] != ' ') {line[j]=str1[i]; j++;} //если не пробел-тогда часть слова
      else j=0; //если есть пробел, тогда слово не последнее, и начнем заново его заполнять со следующей итерации
    } 
    line[j]='\0'; 
    cout<<line; //выводим последнее слово
Теперь в len содержится последнее слово, ошибка может быть если перед точкой будет стоять пробел, но это уже совсем другая история
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 12.05.2010, 09:43   #28
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

PS. Непонятно для чего ты ввел 2 переменные: str и str1...
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 12.05.2010, 16:07   #29
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <set>

bool IsRepeated( const std::string &str ){
    std::set< char > letters;
    for( int i = 0; i < str.length(); ++i )
	if( letters.find( str[i] ) == letters.end() )
	    letters.insert( str[i] );
	else
	    return 1;
    return 0;
}

int main(){
    std::string word;
    std::vector< std::string > words;
    while( 1 ){
	std::cin >> word;
	std::string::size_type pos = word.find(".");
	if( pos == std::string::npos )
	    words.push_back( word );
	else {
	    word = word.substr( 0, pos );
	    if( !word.empty() )
		words.push_back( word );
	    break;
	}
    }
    if( !words.empty() )
	word = *( words.end() - 1 );
    words.erase( std::remove( words.begin(), words.end(), word ), words.end() );
    words.erase( std::remove_if( words.begin(), words.end(), IsRepeated ), words.end() );
    std::copy( words.begin(), words.end(), std::ostream_iterator< std::string >( std::cout, "\n" ) );
}
Можно еще так решить
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 12.05.2010, 20:24   #30
ReaktiV
Пользователь
 
Аватар для ReaktiV
 
Регистрация: 25.07.2008
Сообщений: 82
По умолчанию

mrChester спасибо.
Так теперь надо думать о сравнении.
ReaktiV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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