#include <iostream>
#include <conio>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
vector<char> Str;
char AlfabetLow[] = "abcdefghijklmnopqrstuvwxyz";
char Symbol;
cout << "Input text:" << endl;
while ((Symbol = getch()) != '.')
{
cout << Symbol;
Str.push_back(Symbol);
}
int Length = sizeof(AlfabetLow) - 1;
for (unsigned i = 0; i < Str.size(); i++)
{
for (int j = 0; j < Length; j++)
{
if (AlfabetLow[j] == Str)
{
Str = AlfabetLow[Length - j - 1];
break;
}
}
}
cout << endl << endl << "Result text: " << endl;
for (unsigned i = 0; i < Str.size(); i++) cout << Str;
getch();
return 0;
}
Программа обработки текста, С++.
Действительно очень нужно.
Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции STRING:
а) написать программу ввода такого текста с клавиатуры;
б) каждую букву, стоящую в алфавите на месте K, заменить на букву, стоящую в алфавите на месте K с конца алфавита.
а не могли помочь со схемой алгоритма к проге?)
Код:
//подключаем необходимые библиотечные файлы
#include <iostream> //для cout
#include <conio> //для getch()
#include <vector> //хм... для vector
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
vector<char> Str; //объявляем вектор из символов -- что-то вроде массива с переменной длиной
char AlfabetLow[] = "abcdefghijklmnopqrstuvwxyz";
char Symbol;
cout << "Input text:" << endl; //выводим строчку на экран
while ((Symbol = getch()) != '.')//считываем нажатые клавиши, пока не нажата точка
{
cout << Symbol;//выводим нажатую клавишу на экран
Str.push_back(Symbol);//добавляем считанный символ в вектор -- "запоминаем"
}
int Length = sizeof(AlfabetLow) - 1;//определим длину алфавита
for (unsigned i = 0; i < Str.size(); i++)//для каждого символа из вектора
{
for (int j = 0; j < Length; j++)//определим, совпадает ли он с символом из малого латинского алфавита
{
if (AlfabetLow[j] == Str)
{
Str = AlfabetLow[Length - j - 1];//и заменим его на симметричный с конца алфавита
break;
}
}
}
cout << endl << endl << "Result text: " << endl;//выведем строчку на экран
for (unsigned i = 0; i < Str.size(); i++) cout << Str;//выведем вектор на экран
getch();//ждет нажатия клавиши
return 0;
}
#include <iostream> //для cout
#include <conio> //для getch()
#include <vector> //хм... для vector
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
vector<char> Str; //объявляем вектор из символов -- что-то вроде массива с переменной длиной
char AlfabetLow[] = "abcdefghijklmnopqrstuvwxyz";
char Symbol;
cout << "Input text:" << endl; //выводим строчку на экран
while ((Symbol = getch()) != '.')//считываем нажатые клавиши, пока не нажата точка
{
cout << Symbol;//выводим нажатую клавишу на экран
Str.push_back(Symbol);//добавляем считанный символ в вектор -- "запоминаем"
}
int Length = sizeof(AlfabetLow) - 1;//определим длину алфавита
for (unsigned i = 0; i < Str.size(); i++)//для каждого символа из вектора
{
for (int j = 0; j < Length; j++)//определим, совпадает ли он с символом из малого латинского алфавита
{
if (AlfabetLow[j] == Str)
{
Str = AlfabetLow[Length - j - 1];//и заменим его на симметричный с конца алфавита
break;
}
}
}
cout << endl << endl << "Result text: " << endl;//выведем строчку на экран
for (unsigned i = 0; i < Str.size(); i++) cout << Str;//выведем вектор на экран
getch();//ждет нажатия клавиши
return 0;
}
в задании сказано, что без конструкции string нужно сделать. а в коде есть есть str. но, как я понимаю, это разные вещи. так?:)
Если уж вам так не нравится Str, можете заменить по всему тексту программки другим словом, скажем Stroka или Text
только вот ещё такой вопрос...
я запускаю программу. ввожу текст. ввожу ".". и почему-то после нажатия enter введённая строка выводится снова. зачем это нужно?
//---------------------
Input text:
abcd efghi jklmn
Result text:
zyxw vutsr qponm
//---------------------
Т.е, по порядку:
Вылезает надпись Input text
Вводим текст abcd efghi jklmn
Нажимаем точку
Вылезает Result text: zyxw vutsr qponm
Нажимаем любую кнопку - происходит выход из программы
З.Ы.: в какой среде программируете?
З.З.Ы.: надо, чтобы еще и преподу понравилось ;)
вылезает предложение ввода текста. ввожу текст, в конце ставя точку. нажимаю кнопку enter.
выводится текст без точки.
только потом результат.
[ATTACH]3117[/ATTACH]
Выложите ваш исправленный вариант, посмотрим
я копирую всё, что вы мне написали.
нажимаю debug, но он не кушает библ-ку conio, соответственно ругается на getch.
я изменила getch на getchar, а conio на conio.h...
после чего нужно жать enter, т.к. на точку она реагирует, строка выводится 2 раза. ну и т.д. о чём я и говорила...
Код:
//подключаем необходимые библиотечные файлы
#include <iostream> //для cout
//#include <conio.h> //для getch()
#include <vector> //хм... для vector
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
vector<char> Str; //объявляем вектор из символов -- что-то вроде массива с переменной длиной
char AlfabetLow[] = "abcdefghijklmnopqrstuvwxyz";
char Symbol;
cout << "Input text:" << endl; //выводим строчку на экран
while ((Symbol = getchar()) != '.')//считываем нажатые клавиши, пока не нажата точка
{
cout << Symbol;//выводим нажатую клавишу на экран
Str.push_back(Symbol);//добавляем считанный символ в вектор -- "запоминаем"
}
int Length = sizeof(AlfabetLow) - 1;//определим длину алфавита
for (unsigned i = 0; i < Str.size(); i++)//для каждого символа из вектора
{
for (int j = 0; j < Length; j++)//определим, совпадает ли он с символом из малого латинского алфавита
{
if (AlfabetLow[j] == Str)
{
Str = AlfabetLow[Length - j - 1];//и заменим его на симметричный с конца алфавита
break;
}
}
}
cout << endl << endl << "Result text: " << endl;//выведем строчку на экран
for (unsigned i = 0; i < Str.size(); i++) cout << Str;//выведем вектор на экран
getchar();//ждет нажатия клавиши
return 0;
}
#include <iostream> //для cout
//#include <conio.h> //для getch()
#include <vector> //хм... для vector
using namespace std;
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
vector<char> Str; //объявляем вектор из символов -- что-то вроде массива с переменной длиной
char AlfabetLow[] = "abcdefghijklmnopqrstuvwxyz";
char Symbol;
cout << "Input text:" << endl; //выводим строчку на экран
while ((Symbol = getchar()) != '.')//считываем нажатые клавиши, пока не нажата точка
{
cout << Symbol;//выводим нажатую клавишу на экран
Str.push_back(Symbol);//добавляем считанный символ в вектор -- "запоминаем"
}
int Length = sizeof(AlfabetLow) - 1;//определим длину алфавита
for (unsigned i = 0; i < Str.size(); i++)//для каждого символа из вектора
{
for (int j = 0; j < Length; j++)//определим, совпадает ли он с символом из малого латинского алфавита
{
if (AlfabetLow[j] == Str)
{
Str = AlfabetLow[Length - j - 1];//и заменим его на симметричный с конца алфавита
break;
}
}
}
cout << endl << endl << "Result text: " << endl;//выведем строчку на экран
for (unsigned i = 0; i < Str.size(); i++) cout << Str;//выведем вектор на экран
getchar();//ждет нажатия клавиши
return 0;
}
Цитата:
getchar читает символы с stdin, который имеет
буфер на одну строку. Поэтому она ничего не возвращает
до тех пор, пока вы не нажмете Enter
буфер на одну строку. Поэтому она ничего не возвращает
до тех пор, пока вы не нажмете Enter
исправила, работает. спасибо вам огромное ещё раз!:)
извините, что достаю. но не удалось сдать прогу, препод ругается на использование вектора... нужно сделать динамический массив, в который будем записывать введенные символы с помощью функции gets, затем полученный массив записать в файл, запись осуществим, учитывая, что последний символ ‘.’. В дальнейшем будем работать с файлом. так же нужно сделать так, чтобы прога воспринимала только маленькие латинские буквы. ни русские, ни цифры, ни прочее... помогите, плз.
Цитата:
прога воспринимала только маленькие латинские буквы. ни русские, ни цифры, ни прочее
Если имеется ввиду, что программа должна блокировать ввод прочих символов, то как же она тогда необходимую в конце точку воспримет? Или пробел?
Или имеется ввиду, что программа считывает строку любых символов и конвертирует из них только те, которые латинские маленькие, а другие оставляет как есть?
И что там с файлом, подробнее?
Вот переделка предыдущей программки без вектора, с блокировкой ввода всего, кроме пробела, точки и маленьких латинских символов:
Код:
#include <iostream.h>
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
int main()
{
char Alfabet[] = "abcdefghijklmnopqrstuvwxyz";
int AlfabetLength = sizeof(Alfabet) - 1;
cout << "Input text:" << endl;
int StrLength = 0;
char *szStr = new char [StrLength];
char Symbol;
while ((Symbol = getch()) != EOF)
{
bool bCorrect = false;
for (int i = 0; i < AlfabetLength; i++)
{
if (Symbol == Alfabet)
{
bCorrect = true;
break;
}
}
if (Symbol == ' ' || Symbol == '.') bCorrect = true;
if (!bCorrect) continue;
cout << Symbol;
StrLength++;
char *szBuffer = new char [StrLength];
for (int i = 0; i < StrLength - 1; i++) szBuffer = szStr;
szBuffer[StrLength - 1] = Symbol;
delete[] szStr;
szStr = new char [StrLength];
for (int i = 0; i < StrLength; i++) szStr = szBuffer;
delete[] szBuffer;
if (Symbol == '.') break;
}
for (int i = 0; i < StrLength; i++)
{
for (int j = 0; j < AlfabetLength; j++)
{
if (Alfabet[j] == szStr)
{
szStr = Alfabet[AlfabetLength - j - 1];
break;
}
}
}
cout << endl << endl << "Result text: " << endl;
for (int i = 0; i < StrLength; i++) cout << szStr;
cout << endl;
delete[] szStr;
getch();
return 0;
}
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
int main()
{
char Alfabet[] = "abcdefghijklmnopqrstuvwxyz";
int AlfabetLength = sizeof(Alfabet) - 1;
cout << "Input text:" << endl;
int StrLength = 0;
char *szStr = new char [StrLength];
char Symbol;
while ((Symbol = getch()) != EOF)
{
bool bCorrect = false;
for (int i = 0; i < AlfabetLength; i++)
{
if (Symbol == Alfabet)
{
bCorrect = true;
break;
}
}
if (Symbol == ' ' || Symbol == '.') bCorrect = true;
if (!bCorrect) continue;
cout << Symbol;
StrLength++;
char *szBuffer = new char [StrLength];
for (int i = 0; i < StrLength - 1; i++) szBuffer = szStr;
szBuffer[StrLength - 1] = Symbol;
delete[] szStr;
szStr = new char [StrLength];
for (int i = 0; i < StrLength; i++) szStr = szBuffer;
delete[] szBuffer;
if (Symbol == '.') break;
}
for (int i = 0; i < StrLength; i++)
{
for (int j = 0; j < AlfabetLength; j++)
{
if (Alfabet[j] == szStr)
{
szStr = Alfabet[AlfabetLength - j - 1];
break;
}
}
}
cout << endl << endl << "Result text: " << endl;
for (int i = 0; i < StrLength; i++) cout << szStr;
cout << endl;
delete[] szStr;
getch();
return 0;
}
вводим предложение с точкой.
жмём enter.
прога проверяет только ли это латиница. если нет, то выдаёт ошибку.
если всё ок, то спрашивает, точно ли эту строчку я хочу обрабатывать дальше.
после этого выводит текст обработанный.
вот так это должно выглядеть... знаю, что эт оч замороченно.
следовательно блокировку делать не нужно.) ввести кириллицу можно, и цифры можно, да всё, что угодно можно... но прога должна ругаться и снова предложить корректный ввод заново.
Цитата:
вводим предложение с точкой.
жмём enter.
жмём enter.
Смысл тогда в этой точке?
Цитата:
если всё ок, то спрашивает, точно ли эту строчку я хочу обрабатывать дальше.
Виста стайл, блин! "Вы точно уверены, что точно уверены, что ..."
Цитата:
эт оч замороченно
Это много проще блокировки ))
а смысл точки, наверное, в том, что можно так несколько строк сделать. ну... типа:"today is sunny. i like to jump." без понятия я какой в этом смысл. когда мужчина 77 лет составляет задания для 25 вариантов, от него можно ждать чего угодно. и не факт, что в них ещё и смысл есть.)) но ему хочется, чтоб было вот так, как я до этого написала.
так можно ли без блокировки?) а просто сделать сообщение об ошибке...)
Код:
#include <iostream.h>
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
int main()
{
char Alfabet[] = "abcdefghijklmnopqrstuvwxyz";
int AlfabetLength = sizeof(Alfabet) - 1;
int StrLength = 300;
char *szStr = new char [StrLength];
while(1)
{
cout << "Input text:" << endl;
gets(szStr);
StrLength = strlen(szStr);
bool bCorrectStr = true;
for (int i = 0; i < StrLength; i++)
{
bool bCorrectSymbol = false;
if (szStr == '.')
{
StrLength = i + 1;
bCorrectSymbol = true;
}
else if (szStr == ' ') bCorrectSymbol = true;
else
{
for (int j = 0; j < AlfabetLength; j++)
{
if (szStr == Alfabet[j])
{
bCorrectSymbol = true;
break;
}
}
}
if (!bCorrectSymbol)
{
bCorrectStr = false;
break;
}
}
if (szStr[StrLength - 1] != '.') bCorrectStr = false;
if (bCorrectStr) break;
else cout << endl << "String is not correct. Use only small latin symbols, dot and space symbols. Use at least one dot. Repeat, please." << endl;
}
cout << endl << "Do you want continue with the string \"";
for (int i = 0; i < StrLength; i++) cout << szStr;
cout << "\" (y -- yes, any key -- no): " << endl;
if (getch() != 'y')
{
delete[] szStr;
return 0;
}
for (int i = 0; i < StrLength; i++)
{
for (int j = 0; j < AlfabetLength; j++)
{
if (Alfabet[j] == szStr)
{
szStr = Alfabet[AlfabetLength - j - 1];
break;
}
}
}
cout << endl << "Result text: " << endl;
for (int i = 0; i < StrLength; i++) cout << szStr;
cout << endl;
delete[] szStr;
getch();
return 0;
}
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
int main()
{
char Alfabet[] = "abcdefghijklmnopqrstuvwxyz";
int AlfabetLength = sizeof(Alfabet) - 1;
int StrLength = 300;
char *szStr = new char [StrLength];
while(1)
{
cout << "Input text:" << endl;
gets(szStr);
StrLength = strlen(szStr);
bool bCorrectStr = true;
for (int i = 0; i < StrLength; i++)
{
bool bCorrectSymbol = false;
if (szStr == '.')
{
StrLength = i + 1;
bCorrectSymbol = true;
}
else if (szStr == ' ') bCorrectSymbol = true;
else
{
for (int j = 0; j < AlfabetLength; j++)
{
if (szStr == Alfabet[j])
{
bCorrectSymbol = true;
break;
}
}
}
if (!bCorrectSymbol)
{
bCorrectStr = false;
break;
}
}
if (szStr[StrLength - 1] != '.') bCorrectStr = false;
if (bCorrectStr) break;
else cout << endl << "String is not correct. Use only small latin symbols, dot and space symbols. Use at least one dot. Repeat, please." << endl;
}
cout << endl << "Do you want continue with the string \"";
for (int i = 0; i < StrLength; i++) cout << szStr;
cout << "\" (y -- yes, any key -- no): " << endl;
if (getch() != 'y')
{
delete[] szStr;
return 0;
}
for (int i = 0; i < StrLength; i++)
{
for (int j = 0; j < AlfabetLength; j++)
{
if (Alfabet[j] == szStr)
{
szStr = Alfabet[AlfabetLength - j - 1];
break;
}
}
}
cout << endl << "Result text: " << endl;
for (int i = 0; i < StrLength; i++) cout << szStr;
cout << endl;
delete[] szStr;
getch();
return 0;
}
Что-то пишите вы, хотя бы самые элементарные вещи. А про непонятные конкретные вещи спрашиваете на форуме.
Вопрос "как мне сделать то-то и так-то" -- значительно лучше, чем "напишите за меня программу целиком"
З.Ы. Не стремился задеть или обидеть :)
а ещё вот такой вопрос...
можно ли доделать для нескольких строк?
просто можно ли?
Цитата: darkie
т.е. не прошу вас о этом.)
просто можно ли?
просто можно ли?
да, можно