IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> поиск слова в тексте,выделение,замена регистра букв в слове, C++
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Задание вот такое:
С помощью текстового редактора создать файл,содержащий текст, длина которого не превышает 100 символов(длина строки не должна превышать 70 символов).
Имя файла должно иметь расширение dat.Написать программу,которая:
-выводит текст на экран дисплея;
-по нажатию произвольной клавиши выделяет в тексте заданное слово(ввести слово с клавиатуры);
-выводит текст на эккран дисплея еще раз, заменяя в заданном слове строчные букв прописными.

я воспользовалась поиском и нашла решение задачи на паскале,но всё же работа со строками там сильно отличается от с++.

вот например,можно ли с файла(ну или с экрана) считать тект в массив по словам?как осуществлять поиск конкретного слова,особенно если есть несколько вхождений.

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

очень прошу о помощи)


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ищи внимательнее, я и на С++ эту программу уже делал...
Вот тут: Работа с файлом

Цитата
насчет смены букв строчных на пописные...кажется у них код различается на определенную величину...или как их можно заменить?
Уже все сделано за нас smile.gif tolower/toupper из CTYPE.H
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Цитата(volvo @ 7.11.2006 23:19) *

Ищи внимательнее, я и на С++ эту программу уже делал...
Вот тут: Работа с файлом

это я тоже смотрела)
но мне там не очень понятна ф-ия sinsert...я видела файл,который ее подключает...
но всё равно иначе можно сделать?
или может дадите какие-нибудь комментарии?

Цитата(volvo @ 7.11.2006 23:19) *

Уже все сделано за нас smile.gif tolower/toupper из CTYPE.H

отлично)
а как ими пользоваться,не подскажете?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
но всё равно иначе можно сделать?
Всегда можно сделать иначе, только вот вопрос: если сделать по-другому, тебе сразу все будет понятно? Ты уверена в этом? Посмотрим:
#include <fstream.h>
#include <iostream.h>
#include <conio.h>;
#include <string.h>;

#include <ctype.h>

int main() {

char s[71];

ifstream infile("Text700.txt");
while (!infile.eof()) {
infile.getline(s, 80);
cout << s << endl;
}

cout << "Enter the Word: ";
char word[50];
cin >> word;


infile.seekg(0, ios::beg);
infile.clear();

while(!infile.eof()) {

infile.getline(s, 80);
do {

char *p;
p = strstr(s, word);
if(p) {
for(int i = 0; i < strlen(word); i++) *(p+i) = toupper(*(p+i));
}
else break;

} while(1);
cout << s << endl;
}

cout << "Press any key" << endl;
getche();
return 0;
}



Цитата
как ими пользоваться
Как обычно:
     int length, i;
char *string = "this is a string";

length = strlen(string);
for (i=0; i<length; i++)
{
string[i] = toupper(string[i]);
}
(пример - из справки Turbo C++ 3.0)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


нда...
понятно действительно далеко не всё...хотя разобраться можно)
плюс ко всему я не могу разобраться, как выделить это слово в тексте,ведь оно должно выделяться в уже выведенном тексте .
помогите пожалуйста...

Сообщение отредактировано: Tribunal -


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ну, так оно же выделяется:
          if(p) {
for(int i = 0; i < strlen(word); i++) *(p+i) = toupper(*(p+i));
}
- переводится в верхний регистр...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


не)
оно должно помимо этого еще и в исходном тексте сначала выделить цветом.
вот это как делается?)


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Не знаю. Я этого в задании, например, не увидел... Там вообще нет про ЦВЕТ ни слова. Как задание поставлено, так программа и работает...

А цвет и потоки - вообще понятия несовместимые...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


под словом выделить там подразумевается именно цвет(
а как же тогда поступить,если с потоками работать нельзя?(

Сообщение отредактировано: Tribunal -


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


вот такой штукой можно весь текст выделить),а как конкретное слово я не знаю(

COORD start;
start.X=0;
start.Y=0;
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hConsole,BACKGROUND_BLUE|
FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Значит, смотри, какая есть идея: работа с консольным приложением в MSVC и с DOS-приложением в Turbo C++ существенно различается, поэтому делаем так:

// Я отлаживала программу под DOS - компилятором (TC 3.0), поэтому я это слово определила...
// Тебе (как я понимаю, для консольного приложения Windows), эту строчку надо убрать...
// (к сожалению, MSVC у меня нет, поэтому проверить вывод не могу, но должно работать)
#define RUN_IN_DOS

#ifndef RUN_IN_DOS
#include <windows.h>
#endif

#include <fstream.h>
#include <iostream.h>
#include <conio.h>;
#include <string.h>;

#include <ctype.h>


int main() {

char s[71];

ifstream infile("Text700.txt");
while (!infile.eof()) {
infile.getline(s, 80);
cout << s << endl;
}

cout << "Enter the Word: ";
char word[50];
cin >> word;

// Делаем 2 прохода: на первом - выделяем слово красным цветом,
// а на втором - меняем регистр символов
for(int pass = 0; pass < 2; pass++) {

infile.seekg(0, ios::beg);
infile.clear();

while(!infile.eof()) {

infile.getline(s, 80);
char *pp = &s[0];

do {

char *p;

p = strstr(pp, word);
if(p) {

while(pp != p)
#ifdef RUN_IN_DOS
cprintf("%c", *pp++);
#else
cout << *pp++;
#endif

// первый проход - pass = 0, установить цвет выводимых символов в красный
if(!pass) {
#ifdef RUN_IN_DOS
textcolor(RED);
#else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED);
#endif
}
// А вот это - второй проход, тут меняем регистр ...
else {
for(int i = 0; i < strlen(word); i++)
*(p+i) = toupper(*(p+i));
}

for(int i = 0; i < strlen(word); i++)
#ifdef RUN_IN_DOS
cprintf("%c", *pp++);
#else
cout << *pp++;
#endif

// первый проход, pass = 0 - восстановить серый цвет
if(!pass) {
#ifdef RUN_IN_DOS
textcolor(LIGHTGRAY);
#else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
#endif
}

}
else break;

} while(1);

while(*pp)
#ifdef RUN_IN_DOS
cprintf("%c", *pp++);
cprintf("\n\r");
#else
cout << *pp++;
cout << endl;
#endif
}
cout << "Press any key" << endl;
getche();

}
return 0;
}

Возникает вопрос: "Зачем вообще понадобилось ключевое слово RUN_IN_DOS?"... Затем, что я просто напросто без существенной правки приложения перекомпилирую его под другую OS, и оно должно работать. Просто гораздо удобнее... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


спасибо огромное,только вот я не очень разобралась с самой программой...
поэтому не могу сообразить,как сделать так,чтобы выводилось так же,как и в исходном тексте,
в смысле перенос строки в том же месте.здесь же программа выводит чуть ли не по одной букые в строку...
а если убрать там в одном месте переном строки,то выводится текст сплошником
unsure.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата
не могу сообразить,как сделать так,чтобы выводилось так же,как и в исходном тексте
То есть? В каком "исходном"? Что выводится не так? MinGW + GCC 3.3.4 (Win32 Console Application) работает неотличимо от TC... Проблема в MSVC? Это обращайся в MS к Дяде Биллу, и говори ему спасибо...

Цитата
а если убрать там в одном месте переном строки,то выводится текст сплошником
Ну, если я его добавила, значит, не надо убирать, наверное?

Я, кстати, вообще не понимаю, тебе надо чтоб программа работала, или чтоб было "как раньше"? Тогда пользуйся тем, что было раньше... Какая, например, разница, выводится текст построчно или посимвольно? При длине текста в несколько сотен мегабайт это, конечно, может быть критично... Но
Цитата
текст, длина которого не превышает 100 символов
blink.gif blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


хочется,чтобы это было читаемо...ну и красиво как-то

Цитата(Алена @ 13.11.2006 17:47) *

То есть? В каком "исходном"?

форма в смысле та же,как в файле

Сообщение отредактировано: Tribunal -


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


а что такое
Код
p = strstr(pp, word);
?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


ну вроде теперь всё нормально.
вот только не могли бы вы дать не большие комментарии к
Цитата
for(int i = 0; i < strlen(word); i++)
*(p+i) = toupper(*(p+i));

Цитата
p = strstr(pp, word);
<----вот это поиск подстроки в строке...ну или что-то подобное?

Сообщение отредактировано: Tribunal -


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2024 21:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name