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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В тексте заменить слова "компьютер" на "к*******р 
:(
    Опции темы
AleK135
Дата 5.8.2015, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача: заменить в тексте слова "компьютер" на "к*******р"
Подскажите, что не правильно
Код

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cstring>
 
using namespace std;
 
int main()
{
    
setlocale(LC_CTYPE,"RUS");
    int const N = 10;
   char str[500];
   char a[N] = "компьютер";
   char b[N] = "к*******р";
   ifstream file ("C:\\file.txt");
   while(!file.eof())
   {
       file.getline(str, 500);
       for(int i = 0; i < strlen(str); i++){
        if(strcmp(str, a)==0){
            for(int e = 1; e > N; e++){
                a[e] = b[e];
            }
           }
       }
        
       
   }
   file.close();
   
system("pause");
return 0;
}


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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(AleK135 @  5.8.2015,  16:10 Найти цитируемый пост)
        if(strcmp(str, a)==0)

При сравнении строк функцией strcmp() предполагается, что она проверяет и  завершающие строки нулевые байты, иначе сравнение признаётся неудачным. Поэтому это сравнение сработает только в том случае, если строка str совпадает со строкой a. Если нужно сравнить подстроки, то пользуйтесь функцией strncmp():
Код
        if(strncmp(str, a, 9)==0)



Цитата(AleK135 @  5.8.2015,  16:10 Найти цитируемый пост)
            for(int e = 1; e > N; e++){

Ну а здесь цикл не выполнится ни разу из-за неразумного условия e > N. И почему Вы отсчитываете от 1? В общем случае (но когда длины строк a и b совпадают) это не верно.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
kester
Дата 5.8.2015, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот тут уже сделали самописный str_replace() по аналогии с аналогичной функцией в php: http://2lx.ru/2010/03/str_replace-dlya-c/
Тут ещё несколько вариантов: http://www.cyberforum.ru/cpp-beginners/thread548138.html
гугл полезная вещь


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
AleK135
Дата 5.8.2015, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(feodorv @ 5.8.2015,  18:37)
Цитата(AleK135 @  5.8.2015,  16:10 Найти цитируемый пост)
        if(strcmp(str, a)==0)

При сравнении строк функцией strcmp() предполагается, что она проверяет и  завершающие строки нулевые байты, иначе сравнение признаётся неудачным. Поэтому это сравнение сработает только в том случае, если строка str совпадает со строкой a. Если нужно сравнить подстроки, то пользуйтесь функцией strncmp():
Код
        if(strncmp(str, a, 9)==0)



Цитата(AleK135 @  5.8.2015,  16:10 Найти цитируемый пост)
            for(int e = 1; e > N; e++){

Ну а здесь цикл не выполнится ни разу из-за неразумного условия e > N. И почему Вы отсчитываете от 1? В общем случае (но когда длины строк a и b совпадают) это не верно.

Все сделал, но все равно не изменяет текст... smile 
PM MAIL   Вверх
feodorv
Дата 6.8.2015, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(AleK135 @  5.8.2015,  21:00 Найти цитируемый пост)
Все сделал, но все равно не изменяет текст...

Видимо, в теле цикла никак не учитывается переменная цикла i:
Цитата(AleK135 @  5.8.2015,  16:10 Найти цитируемый пост)
        if(strncmp(&str[i], a, 9)==0){



Это сообщение отредактировал(а) feodorv - 6.8.2015, 01:23


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
volatile
Дата 6.8.2015, 10:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(AleK135 @  5.8.2015,  21:00 Найти цитируемый пост)
Все сделал, но все равно не изменяет текст...   

В строке 23, у вас модификация шаблона поиска, вместо замены файла.

Кроме того, вы изменяете только в памяти. Измененный файл, никуда не выводиться
т.е. никакую замену вы не увидите.

PM MAIL   Вверх
xvr
Дата 6.8.2015, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Для поиска подстроки в строке есть замечательная стандартная функция strstr. А для копирования - memcpy (ну и еще strlen для вычисления длинны того, что надо копировать)



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

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

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

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

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


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

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


 




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


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

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