Enter tmp-> Hellow World, how is your job
Before Hellow World, how is your job
Count of White-space:
1
1
4
3
6
After Hellow World, how....is...your......job
Для продолжения нажмите любую клавишу . . .
Помогите дописать часть кода.
Код:
#include <iostream>
#include <cctype>
#include <cstring>
using namespace std;
int amountSpace (char*);
void zamena(char *t)
{
while (*t)
{
if (isspace (*t))
*t = '.';
}
t++
}
}
int main()
{
char tmp [80];
int p;
int i;
char* ptr;
int k(0);
do
{
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
p=amountSpace(ptr);
if (p==0)
break;
if (p>2)
zamena (ptr);
cout<<"Probel -> "<<p<<endl;
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
delete [] ptr;
}while(1);
return 0;
}
int amountSpace (const char* pS) // Вычеслить в строке количество пробелов
{
int n(0); const char* p(pS);
while (*p)
{
if (isspace (*p)) ++n;
p++;
}
return n;
}
#include <cctype>
#include <cstring>
using namespace std;
int amountSpace (char*);
void zamena(char *t)
{
while (*t)
{
if (isspace (*t))
*t = '.';
}
t++
}
}
int main()
{
char tmp [80];
int p;
int i;
char* ptr;
int k(0);
do
{
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
p=amountSpace(ptr);
if (p==0)
break;
if (p>2)
zamena (ptr);
cout<<"Probel -> "<<p<<endl;
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
delete [] ptr;
}while(1);
return 0;
}
int amountSpace (const char* pS) // Вычеслить в строке количество пробелов
{
int n(0); const char* p(pS);
while (*p)
{
if (isspace (*p)) ++n;
p++;
}
return n;
}
Тогда надо было написать: Заменить все пробелы на троеточее.
вот держи:)
Код:
#include <iostream>
using namespace std;
char* Amount(char* ptr);
char* Change(char* ptr, int spaceEnd, int count);
int main()
{
char tmp [80];
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
char* ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
ptr = Amount(ptr);
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
if(ptr)
delete[] ptr;
system("pause");
return 0;
}
/*фун-ция ищет в стороке пробелы до первого встречного
потом проверяет на наличие пробелов заново, пока пробелы
не исчезнут
*/
char* Amount(char* ptr)
{
//флаг, который останавливает цикл проверки на пробелы
bool ExitFlag = false;
/*флаг, который разрешает вызвать функцию для замена пробелов
на текущей позиции
*/
bool SpaceFlag = false;
/*указатель на строку, в том числе и преобразованную*/
char* point = ptr;
cout<<"Amount of White-Space: "<<endl;
/*цикл проверки на наличие пробелов*/
do
{
ExitFlag = true;
SpaceFlag = false;
/*кол-во пробелов*/
int count = 0;
/*получаем указатель на преобразованную строку*/
ptr = point;
/*длинна строки*/
int Length = strlen(ptr);
/*индекс конечного пробела*/
int spaceEnd = -1;
for(int idx=0; idx<Length;idx++)
{
/*если есть пробел в символе*/
if(isspace(ptr[idx]))
{
/*инкрементируем счетчик*/
count++;
/*запоминаем индекс последнего пробела*/
spaceEnd = idx;
/*ставил флаг что нашли пробел*/
SpaceFlag = true;
}
/*если нет пробела в символе*/
else
{
/*если были найдены пробелы*/
if(SpaceFlag == true)
{
/*вызываем фун-ию замены пробелов и получаем указатель на новую моди-
фицированную строку*/
point = Change(ptr,spaceEnd, count);
/*выводим кол-во пробелов ранне найденное*/
cout<<count<<endl;
SpaceFlag = false;
/*оставливаем цикл ходьбы по страке*/
break;
}
}
}
/*проверяем, если были пробелы, проверяем строку еще раз на пробелы, если нет -
заканчиваем работу нашей фун-ции*/
if(count == 0)ExitFlag = false;
}
while(ExitFlag);
return ptr;
}
/*замена пробелов на троеточие*/
char* Change(char* ptr, int spaceEnd, int count)
{
/*длинна текущей строки*/
int Length = strlen(ptr);
/*индекс начала 1-ого пробела*/
int spaceBegin = spaceEnd - count;
/*первый символ после пробела*/
int LastLine = spaceEnd + 1;
/*флаг, хранящий первый символ после пробела*/
int fixLastLine = LastLine;
/*длина новой строки*/
int newLength = -1;
/*если пробелов больше 2*/
if(count > 2)
{
/*задаем длину новой строки*/
newLength = Length - count + 4;
}
/*если пробелов меньше 2*/
else
{
/*кол-во пробелов = 1, задаем длину новой строки*/
if(count == 1) newLength = Length + 3;
/*кол-во пробелов = 2, задаем длину новой строки*/
if(count == 2) newLength = Length + 4;
}
/*выделяем память под новую строку*/
char* newPtr = new char[newLength];
/*цикл записи в новую строку модифицированой строки*/
for(int idx=0; idx<newLength; idx++)
{
/*записывам символы пока не встречали пробелы в новую строку*/
if(idx <= spaceBegin)
{
newPtr[idx] = ptr[idx];
}
/*записывам 3 точки вместо пробелов и оставшиеся символы*/
else
{
/*если пробелов между слова больше 1
Если индекс в новой строке меньше индекс последнего пробела
и если было больше 3 пробелов делаем один раз замену всех проблов на троеточее,
чтобы не было глюка при замене большого коли-ва пробелов*/
if(idx < spaceEnd && LastLine == fixLastLine)
{
/*записывам 3 точки вместо пробелов*/
for(int jdx=0; jdx<3; jdx++)
{
newPtr[idx] = '.';
idx++;
}
}
/*если пробел между слова один*/
if(idx == spaceEnd && count == 1)
{
/*записывам 3 точки вместо пробела*/
for(int jdx=0; jdx<3; jdx++)
{
newPtr[idx] = '.';
idx++;
}
}
newPtr[idx] = ptr[LastLine];
LastLine++;
}
}
/*освобождаем память, которую использовала старая строка*/
if(ptr) delete []ptr;
/*возращаем указаатель на новую строку*/
return newPtr;
}
using namespace std;
char* Amount(char* ptr);
char* Change(char* ptr, int spaceEnd, int count);
int main()
{
char tmp [80];
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
char* ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
ptr = Amount(ptr);
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
if(ptr)
delete[] ptr;
system("pause");
return 0;
}
/*фун-ция ищет в стороке пробелы до первого встречного
потом проверяет на наличие пробелов заново, пока пробелы
не исчезнут
*/
char* Amount(char* ptr)
{
//флаг, который останавливает цикл проверки на пробелы
bool ExitFlag = false;
/*флаг, который разрешает вызвать функцию для замена пробелов
на текущей позиции
*/
bool SpaceFlag = false;
/*указатель на строку, в том числе и преобразованную*/
char* point = ptr;
cout<<"Amount of White-Space: "<<endl;
/*цикл проверки на наличие пробелов*/
do
{
ExitFlag = true;
SpaceFlag = false;
/*кол-во пробелов*/
int count = 0;
/*получаем указатель на преобразованную строку*/
ptr = point;
/*длинна строки*/
int Length = strlen(ptr);
/*индекс конечного пробела*/
int spaceEnd = -1;
for(int idx=0; idx<Length;idx++)
{
/*если есть пробел в символе*/
if(isspace(ptr[idx]))
{
/*инкрементируем счетчик*/
count++;
/*запоминаем индекс последнего пробела*/
spaceEnd = idx;
/*ставил флаг что нашли пробел*/
SpaceFlag = true;
}
/*если нет пробела в символе*/
else
{
/*если были найдены пробелы*/
if(SpaceFlag == true)
{
/*вызываем фун-ию замены пробелов и получаем указатель на новую моди-
фицированную строку*/
point = Change(ptr,spaceEnd, count);
/*выводим кол-во пробелов ранне найденное*/
cout<<count<<endl;
SpaceFlag = false;
/*оставливаем цикл ходьбы по страке*/
break;
}
}
}
/*проверяем, если были пробелы, проверяем строку еще раз на пробелы, если нет -
заканчиваем работу нашей фун-ции*/
if(count == 0)ExitFlag = false;
}
while(ExitFlag);
return ptr;
}
/*замена пробелов на троеточие*/
char* Change(char* ptr, int spaceEnd, int count)
{
/*длинна текущей строки*/
int Length = strlen(ptr);
/*индекс начала 1-ого пробела*/
int spaceBegin = spaceEnd - count;
/*первый символ после пробела*/
int LastLine = spaceEnd + 1;
/*флаг, хранящий первый символ после пробела*/
int fixLastLine = LastLine;
/*длина новой строки*/
int newLength = -1;
/*если пробелов больше 2*/
if(count > 2)
{
/*задаем длину новой строки*/
newLength = Length - count + 4;
}
/*если пробелов меньше 2*/
else
{
/*кол-во пробелов = 1, задаем длину новой строки*/
if(count == 1) newLength = Length + 3;
/*кол-во пробелов = 2, задаем длину новой строки*/
if(count == 2) newLength = Length + 4;
}
/*выделяем память под новую строку*/
char* newPtr = new char[newLength];
/*цикл записи в новую строку модифицированой строки*/
for(int idx=0; idx<newLength; idx++)
{
/*записывам символы пока не встречали пробелы в новую строку*/
if(idx <= spaceBegin)
{
newPtr[idx] = ptr[idx];
}
/*записывам 3 точки вместо пробелов и оставшиеся символы*/
else
{
/*если пробелов между слова больше 1
Если индекс в новой строке меньше индекс последнего пробела
и если было больше 3 пробелов делаем один раз замену всех проблов на троеточее,
чтобы не было глюка при замене большого коли-ва пробелов*/
if(idx < spaceEnd && LastLine == fixLastLine)
{
/*записывам 3 точки вместо пробелов*/
for(int jdx=0; jdx<3; jdx++)
{
newPtr[idx] = '.';
idx++;
}
}
/*если пробел между слова один*/
if(idx == spaceEnd && count == 1)
{
/*записывам 3 точки вместо пробела*/
for(int jdx=0; jdx<3; jdx++)
{
newPtr[idx] = '.';
idx++;
}
}
newPtr[idx] = ptr[LastLine];
LastLine++;
}
}
/*освобождаем память, которую использовала старая строка*/
if(ptr) delete []ptr;
/*возращаем указаатель на новую строку*/
return newPtr;
}
Код:
#include <iostream>
#include <cctype>
#include <cstring>
using namespace std;
int amountSpace (const char*);
void zamena(char *t)
{
while (*t)
{
if (isspace (*t))
*t = '.';
t++;
}
}
int main()
{
char tmp [80];
int p;
int i;
char* ptr;
int k(0);
do
{
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
ptr=new char [strlen (tmp)+1];
strcpy (ptr, tmp);
cout <<"\nBefore\t" << ptr << endl;
p=amountSpace(ptr);
if (p==0)
break;
if (p>2)
zamena (ptr);
cout<<"Probel -> "<<p<<endl;
cout <<"After\t" << ptr << endl<<endl;
delete [] ptr;
}while(1);
return 0;
}
int amountSpace (const char* pS)
{
int n(0);
const char* p(pS);
while (*p)
{
if (isspace (*p)) ++n;
p++;
}
return n;
}
#include <cctype>
#include <cstring>
using namespace std;
int amountSpace (const char*);
void zamena(char *t)
{
while (*t)
{
if (isspace (*t))
*t = '.';
t++;
}
}
int main()
{
char tmp [80];
int p;
int i;
char* ptr;
int k(0);
do
{
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
ptr=new char [strlen (tmp)+1];
strcpy (ptr, tmp);
cout <<"\nBefore\t" << ptr << endl;
p=amountSpace(ptr);
if (p==0)
break;
if (p>2)
zamena (ptr);
cout<<"Probel -> "<<p<<endl;
cout <<"After\t" << ptr << endl<<endl;
delete [] ptr;
}while(1);
return 0;
}
int amountSpace (const char* pS)
{
int n(0);
const char* p(pS);
while (*p)
{
if (isspace (*p)) ++n;
p++;
}
return n;
}
Там одна точка, а нужно три.
Код:
#include <iostream>
using namespace std;
void amountSpace (char* ptr);
void zamena(char *ptr, int count);
int main()
{
char tmp [80];
char* ptr;
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
amountSpace(ptr);
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
system("pause");
delete [] ptr;
return 0;
}
void amountSpace (char* ptr) // Вычеслить в строке количество пробелов
{
cout << "Count of White-space:" <<endl;
do
{
int count = 0;
bool flag = false;
while(*ptr)
{
if(isspace(*ptr))
{
flag = true;
count++;
*ptr++;
}
else
{
if(flag == true)
{
if(count > 2)
{
cout << count << endl;
zamena(ptr, count);
flag = false;
break;
}
else
{
cout << count << endl;
flag = false;
count = 0;
*ptr++;
}
}
else
{
*ptr++;
}
}
}
if(count == 0)
break;
}
while(1);
}
void zamena(char *ptr, int count)
{
for(int idx = count; idx != 0; idx--)
{
*ptr --;
}
for(int idx = 0; idx < count; idx++)
{
*ptr = '.';
*ptr++;
}
}
using namespace std;
void amountSpace (char* ptr);
void zamena(char *ptr, int count);
int main()
{
char tmp [80];
char* ptr;
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
amountSpace(ptr);
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
system("pause");
delete [] ptr;
return 0;
}
void amountSpace (char* ptr) // Вычеслить в строке количество пробелов
{
cout << "Count of White-space:" <<endl;
do
{
int count = 0;
bool flag = false;
while(*ptr)
{
if(isspace(*ptr))
{
flag = true;
count++;
*ptr++;
}
else
{
if(flag == true)
{
if(count > 2)
{
cout << count << endl;
zamena(ptr, count);
flag = false;
break;
}
else
{
cout << count << endl;
flag = false;
count = 0;
*ptr++;
}
}
else
{
*ptr++;
}
}
}
if(count == 0)
break;
}
while(1);
}
void zamena(char *ptr, int count)
{
for(int idx = count; idx != 0; idx--)
{
*ptr --;
}
for(int idx = 0; idx < count; idx++)
{
*ptr = '.';
*ptr++;
}
}
Запустите через Visual Studio 2008 гляньте
Вот лог:
Код:
Ааа....Я понял что вы сделали, пасибо большое вам, но вы чуть не так задание поняли....в результате у меня должно быть приблезительно такое "I...do...not...speak...English" <---- вот такие троеточия, между словами три точки, даже если между словами был 1 пробел (та и в принципе больше одного пробела Я ставить между словами не буду)
Помоги пожалуйста !!!!!!!!
Код:
#include <iostream>
using namespace std;
char* Amount(char* ptr);
char* Change(char* ptr, int spaceEnd, int count);
int main()
{
char tmp [80];
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
char* ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
ptr = Amount(ptr);
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
if(ptr)
delete[] ptr;
system("pause");
return 0;
}
char* Amount(char* ptr)
{
bool ExitFlag = false, SpaceFlag = false;
char* point = ptr;
cout<<"Amount of White-Space: "<<endl;
do
{
ExitFlag = true;
SpaceFlag = false;
int count = 0;
ptr = point;
int Length = strlen(ptr);
int spaceEnd = -1;
for(int idx=0; idx<Length;idx++)
{
if(isspace(ptr[idx]))
{
count++;
spaceEnd = idx;
SpaceFlag = true;
}
else
{
if(SpaceFlag == true)
{
if(count > 2)
{
point = Change(ptr,spaceEnd, count);
cout<<count<<endl;
SpaceFlag = false;
break;
}
else
{
count = 0;
SpaceFlag = false;
}
}
}
}
if(count == 0)ExitFlag = false;
}
while(ExitFlag);
return ptr;
}
char* Change(char* ptr, int spaceEnd, int count)
{
int Length = strlen(ptr);
int spaceBegin = spaceEnd - count;
int LastLine = spaceEnd + 1;
int newLength = Length - count + 4;
char* newPtr = new char[newLength];
for(int idx=0; idx<newLength; idx++)
{
if(idx <= spaceBegin)
{
newPtr[idx] = ptr[idx];
}
else
{
if(idx < spaceEnd)
{
for(int jdx=0; jdx<3; jdx++)
{
newPtr[idx] = '.';
idx++;
}
}
newPtr[idx] = ptr[LastLine];
LastLine++;
}
}
newPtr[newLength-1] = '\0';
if(ptr) delete []ptr;
return newPtr;
}
using namespace std;
char* Amount(char* ptr);
char* Change(char* ptr, int spaceEnd, int count);
int main()
{
char tmp [80];
cout <<"Enter tmp-> ";
cin.getline (tmp,80);
char* ptr=new char [strlen (tmp)+1];
strcpy_s (ptr, strlen (tmp)+1, tmp);
cout <<"\nBefore\t" << ptr << endl; //строка до обработки
ptr = Amount(ptr);
cout <<"After\t" << ptr << endl<<endl; //строка после обработки
if(ptr)
delete[] ptr;
system("pause");
return 0;
}
char* Amount(char* ptr)
{
bool ExitFlag = false, SpaceFlag = false;
char* point = ptr;
cout<<"Amount of White-Space: "<<endl;
do
{
ExitFlag = true;
SpaceFlag = false;
int count = 0;
ptr = point;
int Length = strlen(ptr);
int spaceEnd = -1;
for(int idx=0; idx<Length;idx++)
{
if(isspace(ptr[idx]))
{
count++;
spaceEnd = idx;
SpaceFlag = true;
}
else
{
if(SpaceFlag == true)
{
if(count > 2)
{
point = Change(ptr,spaceEnd, count);
cout<<count<<endl;
SpaceFlag = false;
break;
}
else
{
count = 0;
SpaceFlag = false;
}
}
}
}
if(count == 0)ExitFlag = false;
}
while(ExitFlag);
return ptr;
}
char* Change(char* ptr, int spaceEnd, int count)
{
int Length = strlen(ptr);
int spaceBegin = spaceEnd - count;
int LastLine = spaceEnd + 1;
int newLength = Length - count + 4;
char* newPtr = new char[newLength];
for(int idx=0; idx<newLength; idx++)
{
if(idx <= spaceBegin)
{
newPtr[idx] = ptr[idx];
}
else
{
if(idx < spaceEnd)
{
for(int jdx=0; jdx<3; jdx++)
{
newPtr[idx] = '.';
idx++;
}
}
newPtr[idx] = ptr[LastLine];
LastLine++;
}
}
newPtr[newLength-1] = '\0';
if(ptr) delete []ptr;
return newPtr;
}
Ты меняешь пробелы на троеточия когда пробелов между словами три или больше, а мне нужно что бы оно меняло на троеточия даже когда между словами один пробел, как то нужно выделить место перед первой точкой и записать туда ещё две (это если делать продолжение моей
Ты делаешь троеточия когда между словами больше или равно трех пробелов,а мне нужно что бы оно меняло на троеточие даже когда между словами один единственный пробел, даже если два или хоть 10000000000 пробелов всё ровно на одно троеточие.
Вот исходная строка: I do not speak English или хоть даже так I_____do__________not___speak ___________English
Вот переделанная (переделаная строка будет и для первого и для второго варианта одинаковой) : I...do...not...speak...English
P.S. Я пойму тебя прекрасно если ты пошлёшь меня, и не станешь переделывать.....