Задачи По Технологиям Программирования (Шурыгин В. Н.)
.docxНайти в строке слово минимальной длины и возвратить индекс его начала. (Программирование это хороший предмет)
int str(char* stroka)
{
int min=2147483647;
char* min_start;
char*begin=stroka;
while(*stroka)
{
if(*stroka!=' ')
{
char*start=stroka;
while(*stroka&&*stroka!=' ')
stroka++;
if(stroka-start<min)
{
min=stroka-start;
min_start=start;
}
}
else
stroka++;
}
return min_start-begin;
}
int main(int argc, char *argv[])
{
char* s = "Programmirovanie eto horoshiy predmet";
printf("insex slova s minimalnoy dlinoy: %d\n", str(s));
system("PAUSE");
return EXIT_SUCCESS;
}
Оставить в строке по одному пробелу между словами. (Программирование это хороший предмет) Между словами программирование и это - 2 пробела, это и хороший – 1 пробел, хороший и предмет – 3 пробела.
void str(char* stroka,char*vyh_stroka)
{
while(*stroka)
{
if(!(*stroka==' '&& *(stroka+1)==' '))
{
*vyh_stroka=*stroka;
vyh_stroka++;
}
stroka++;
}
*vyh_stroka='\0';
}
int main(int argc, char *argv[])
{
char* s1 = "Programmirovanie eto horoshiy predmet";
char s2[50];
str(s1,s2);
printf("Result: %s\n", s2);
system("PAUSE");
return EXIT_SUCCESS;
}
Заменить в строке все целые константы из 1 цифры соответствующим повторением следующего за ними символа (например " abc 5sacb 3z" - " abcsssssacbzzz ") .
void str(char* stroka,char*vyh_stroka)
{
char*begin=stroka;
while(*stroka)
{
if((begin==stroka||!(*(stroka-1)>='0'&&*(stroka-1)<='9'))&&*stroka>='0'&&*stroka<='9'&&!(*(stroka+1)>='0'&&*(stroka+1)<='9'))
{
for(int i=0;i<*stroka-'0';i++)
{
*vyh_stroka=*(stroka+1);
vyh_stroka++;
}
stroka++;
}
else
{
*vyh_stroka=*stroka;
vyh_stroka++;
}
if(*stroka)
stroka++;
}
*vyh_stroka='\0';
}
int main(int argc, char *argv[])
{
char* s1 = "abc 5sabc 3z";
char s2[50];
str(s1,s2);
printf("Result: %s\n", s2);
system("PAUSE");
return EXIT_SUCCESS;
}
Найти в строке и удалить из нее последовательность повторяющихся символов максимальной длины (например, " abcdddddacbggggggggggggggggz" - " abcdddddacbz").
void str(char* stroka,char*vyh_stroka)
{
char*begin=stroka;
char*current=stroka;
int max=0;
char*index=NULL;//указатель на начало max последовательности
while(*stroka)
{
if(begin!=stroka&&*stroka != *(stroka-1))
{
if(stroka-current>max)
{
max=stroka-current;
index=current;
}
current=stroka;
}
stroka++;
}
while(begin!=index)
{
*vyh_stroka=*begin;
vyh_stroka++;
begin++;
}
begin+=max;
while(*begin)
{
*vyh_stroka=*begin;
vyh_stroka++;
begin++;
}
*vyh_stroka='\0';
}
int main(int argc, char *argv[])
{
char* s1 = "abcdddddacbggggggggggggggggz";
char s2[50];
str(s1,s2);
printf("Result: %s\n", s2);
system("PAUSE");
return EXIT_SUCCESS;
}