Задание вот такое:
С помощью текстового редактора создать файл,содержащий текст, длина которого не превышает 100 символов(длина строки не должна превышать 70 символов).
Имя файла должно иметь расширение dat.Написать программу,которая:
-выводит текст на экран дисплея;
-по нажатию произвольной клавиши выделяет в тексте заданное слово(ввести слово с клавиатуры);
-выводит текст на эккран дисплея еще раз, заменяя в заданном слове строчные букв прописными.
я воспользовалась поиском и нашла решение задачи на паскале,но всё же работа со строками там сильно отличается от с++.
вот например,можно ли с файла(ну или с экрана) считать тект в массив по словам?как осуществлять поиск конкретного слова,особенно если есть несколько вхождений.
и вот насчет смены букв строчных на пописные...кажется у них код различается на определенную величину...или как их можно заменить?
очень прошу о помощи)
Ищи внимательнее, я и на С++ эту программу уже делал...
Вот тут: http://forum.pascal.net.ru/index.php?s=&showtopic=10806&view=findpost&p=68720
#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;(пример - из справки Turbo C++ 3.0)
char *string = "this is a string";
length = strlen(string);
for (i=0; i<length; i++)
{
string[i] = toupper(string[i]);
}
нда...
понятно действительно далеко не всё...хотя разобраться можно)
плюс ко всему я не могу разобраться, как выделить это слово в тексте,ведь оно должно выделяться в уже выведенном тексте .
помогите пожалуйста...
Ну, так оно же выделяется:
if(p) {- переводится в верхний регистр...
for(int i = 0; i < strlen(word); i++) *(p+i) = toupper(*(p+i));
}
не)
оно должно помимо этого еще и в исходном тексте сначала выделить цветом.
вот это как делается?)
Не знаю. Я этого в задании, например, не увидел... Там вообще нет про ЦВЕТ ни слова. Как задание поставлено, так программа и работает...
А цвет и потоки - вообще понятия несовместимые...
под словом выделить там подразумевается именно цвет(
а как же тогда поступить,если с потоками работать нельзя?(
вот такой штукой можно весь текст выделить),а как конкретное слово я не знаю(
COORD start;
start.X=0;
start.Y=0;
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole,BACKGROUND_BLUE|
FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
Значит, смотри, какая есть идея: работа с консольным приложением в MSVC и с DOS-приложением в Turbo C++ существенно различается, поэтому делаем так:
Возникает вопрос: "Зачем вообще понадобилось ключевое слово RUN_IN_DOS?"... Затем, что я просто напросто без существенной правки приложения перекомпилирую его под другую OS, и оно должно работать. Просто гораздо удобнее...
// Я отлаживала программу под 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;
}
спасибо огромное,только вот я не очень разобралась с самой программой...
поэтому не могу сообразить,как сделать так,чтобы выводилось так же,как и в исходном тексте,
в смысле перенос строки в том же месте.здесь же программа выводит чуть ли не по одной букые в строку...
а если убрать там в одном месте переном строки,то выводится текст сплошником
хочется,чтобы это было читаемо...ну и красиво как-то
а что такое
ну вроде теперь всё нормально.
вот только не могли бы вы дать не большие комментарии к