Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не получается найти строку в файле 
:(
    Опции темы
getUp
Дата 23.10.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.10.2009

Репутация: нет
Всего: нет



подскажите почему не получается найти строку words = word1 + ' ' + word2

Код



#include "stdafx.h"
#include "fstream"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string>

using namespace std; 

void main()
{
    setlocale(LC_ALL,"russian");
    string word1;
    string word2;
    string words;
    string current_str;
    cin >> word1;
    cin >> word2;
    
             words=word1+' '+word2;
    
    ifstream file("D:\\F.txt");

    while(!(file.eof()))
    { 
        getline(file, current_str, ' ');
        
        if (word1.compare(current_str)==NULL)
            cout<<"нашлось 1е слово ";
        
        if (word2.compare(current_str)==NULL)
            cout<<"нашлось 2е слово";
    }

    while(!(file.eof()))
    { 
        getline(file, current_str);
        if (words.compare(current_str)==NULL)
                     cout<<"слова рядом через пробел";
    }

    getch();
}



PM MAIL   Вверх
niXman
Дата 23.10.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Код

#include <iostream>
#include <locale.h>
#include <string>
using namespace std; 

int main() {
    setlocale(LC_ALL,"russian");
    string word1;
    string word2;
    string words;
    string current_str;
    cin >> word1;
    cin >> word2;
    
    words=word1+' '+word2;
    
    ifstream file("D:\\F.txt");
    while( !file.eof() ) {
        getline(file, current_str, ' ');
        
        if (word1 == current_str)
            cout<<"нашлось 1е слово ";
        
        if (word2 == current_str)
            cout<<"нашлось 2е слово";
    }
    while( !file.eof() ) {
        getline(file, current_str);
        if (words == current_str)
                     cout<<"слова рядом через пробел";
    }
    
    cin >> words;
    
    return 0;
}


--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
getUp
Дата 23.10.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.10.2009

Репутация: нет
Всего: нет



не понял... то что вы мне написали работает точно также как и мой вариант
и зачем нужно cin >> words в конце?

мне нужно сделать следующее: выполнить поиск 1ого слова в файле, выполнить поиск 2ого слова в том же файле, и найти эти слова разделенные пробелом (что у меня и не получается). слова по отдельности ищет отлично
PM MAIL   Вверх
niXman
Дата 23.10.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Цитата(getUp @  23.10.2009,  17:09 Найти цитируемый пост)
то что вы мне написали работает точно также как и мой вариант

Я показал как правильно сравнивать строки.

Цитата(getUp @  23.10.2009,  17:09 Найти цитируемый пост)
и зачем нужно cin >> words в конце?

Вместо getch(). Если пишешь на С++, то для чего использовать функции из Си?

Цитата(getUp @  23.10.2009,  17:09 Найти цитируемый пост)
найти эти слова разделенные пробелом (что у меня и не получается)

Возможно их там попросту нет.

Добавлено @ 19:36
Йоу. Перепозиционироваться забыл.
Код

#include <iostream>
#include <locale.h>
#include <string>
using namespace std; 
int main() {
    setlocale(LC_ALL,"russian");
    string word1;
    string word2;
    string words;
    string current_str;
    cin >> word1;
    cin >> word2;
    
    words=word1+' '+word2;
    
    ifstream file("D:\\F.txt");
    while( !file.eof() ) {
        getline(file, current_str, ' ');
        
        if (word1 == current_str)
            cout<<"нашлось 1е слово ";
        
        if (word2 == current_str)
            cout<<"нашлось 2е слово";
    }
    file.seekg(0); /** <<<<<<<<<<<<<<<<<<<<<<<< */
    while( !file.eof() ) {
        getline(file, current_str);
        if (words == current_str)
                     cout<<"слова рядом через пробел";
    }
    
    cin >> words;
    
    return 0;
}



Это сообщение отредактировал(а) niXman - 23.10.2009, 19:37
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
getUp
Дата 23.10.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.10.2009

Репутация: нет
Всего: нет



Цитата

Возможно их там попросту нет.

есть! в файл записал 3 слова: "word", "world" и "work". все слова записаны через пробел.

в ходе выполнения программы ввожу:
word
world

в результате вижу следующее:
нашлось 1е слово нашлось 2е слово

чего не хватает:
слова рядом через пробел
PM MAIL   Вверх
niXman
Дата 23.10.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Цитата(niXman @  23.10.2009,  17:34 Найти цитируемый пост)
Йоу. Перепозиционироваться забыл.


Добавлено через 2 минуты и 32 секунды
После этого:
Код

getline(file, current_str);

что находится в current_str ?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
getUp
Дата 23.10.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.10.2009

Репутация: нет
Всего: нет



поменял это:
Код

file.seekg(0);
    while( !file.eof() ) {
        getline(file, current_str);
        if (words == current_str)
                     cout<<"слова рядом через пробел";
    }

на это:
Код


file.seekg(0);
    while( !file.eof() ) {
        getline(file, current_str, ',');
        if (words == current_str)
                     cout<<"слова рядом через пробел";
    }


в файле поставил запятую после слова world. в ходе выполнения программы ввел "word" и "world".
все нашлось так как поиск шел до запятой, которая стояла после world.
как сделать чтобы работал без запятой?


в current_str помещается строка из потока file

Это сообщение отредактировал(а) getUp - 23.10.2009, 20:08
PM MAIL   Вверх
LigLink
Дата 25.10.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.10.2009
Где: солнечный Крым

Репутация: нет
Всего: нет



getUp, функция string::compare в твоем случае работает не так как хотелось-бы.
То же относительно оператора "==".


Вот ссылка почитай об использовании  string::compare и посмотри примеры. Все станет намного понятнее.
тыц сюда

а вот то, что может помочь решить твою проблему:
теперь тыц сюда

При этом обрати внимание на возвращаемое значение функции, и не забудь  учесть его при составлении условий smile 
PM MAIL   Вверх
shuttle
Дата 26.10.2009, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



запусти по шагам (F10) и посмотри какое значение будет в words.
Код

words=word1+' '+word2;

в этом выражении
--------------------
PM MAIL   Вверх
LigLink
Дата 26.10.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.10.2009
Где: солнечный Крым

Репутация: нет
Всего: нет



niXman, а при таком перепозиционировании ( file.seekg(0); )

у тебя срабатывает заход в цикл? у меня чет нет.

PM MAIL   Вверх
zim22
Дата 26.10.2009, 11:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(LigLink @  26.10.2009,  11:11 Найти цитируемый пост)
у тебя срабатывает заход в цикл? у меня чет нет.

выход из цикла может произойти в связи с достижением конца файла или ошибкой ввода.
в любом случае поток будет установлен в недопустимое состояние.
сбросить поток так:
Код

имя_потока.clear()



--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.