Для использования строковых функций вам потребуется подключить к программе соответствующие стандартные заголовки. Это string.h для всех функций, кроме sprintf и sscanf, определенных в stdio.h и функций преобразования atof, atoi, atol и itoa, ltoa, определенных в stdlib.h.
Заключение
Имя Примечания
Getch();
Delete s2;
Strcpy(s,s2);
Gets(s);
Int i,j;
Void main(void)
Т.е. между словами в строке не должно быть более одного пробела.
Написать программу, удаляющую из строки лишние пробелы
Задача.
Strstr возвращает указатель на первую встретившуюся подстроку substring в строке s или NULL, если таковая не встретилась.
Strrchr возвращает указатель на местонахождение последнего совпадения с символом c в строке s (т.е. поиск производится с конца строки в направлении к ее началу прим. перев.). Если символ не найден, то возвращается NULL.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
{
char s[200],*s2;
s2=new char[strlen(s)+1];
for(i=0,j=0;i<strlen(s)+1;i++)
{
s2[j]=s[i];
if(s[i]==' ') { while(s[i]==' ')i++; i--;}
j++;
}
s2[j+1]='\0';
cout<<s<<endl;
}
Краткий справочник функций <string.h>
void *memcpy(void *dest, const void *src, size_t n); копирует n байт из области памяти src в dest, которые не должны пересекаться, в противном случае результат неопределен (возможно как правильное копирование, так и нет)
void *memmove(void *dest, const void *src, size_t n); копирует n байт из области памяти src в dest, которые в отличие от memcpy могут перекрываться
void *memchr(const void *s, char c, size_t n); возвращает указатель на первое вхождение c в первых n байтах s, или NULL, если не найдено
int memcmp(const void *s1, const void *s2, size_t n); сравнивает первые n символов в областях памяти
void *memset(void *, int z, size_t); заполняет область памяти одним байтом z
char *strcat(char *dest, const char *src); дописывает строку src в конец dest
char *strncat(char *, const char *, size_t); дописывает не более n начальных симолов строки src (или всю src, если ее длина меньше) в конец dest
char *strchr(const char *, int); ищет символ в строке, начиная с головы и возращает его адрес, или NULL если не найден
char *strrchr(const char *, int); ищет символ в строке, начиная с хвоста и возращает его адрес, или NULL если не найден
int strcmp(const char *, const char *); лексикографическое сравнение строк
int strncmp(const char *, const char *, size_t); лексикографическое сравнение первых n байтов строк
char *strcpy(char *toHere, const char *fromHere); копирует строку из одного места в другое
char *strncpy(char *toHere, const char *fromHere, size_t n); копирует до n байт строки из одного места в другое
char *strerror(int); возвращает строковое представление сообщения об ошибке errno (не потоко-безопасная)
size_t strlen(const char *); возвращает длину строки
size_t strspn(const char *s, const char *accept); определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, перечисленных в accept
size_t strcspn(const char *s, const char *reject); определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, не перечисленных в reject
char *strpbrk(const char *s, const char *accept); находит первое вхождение любого символа, перечисленного в accept
char *strstr(const char *haystack, const char *needle); находит первое вхождение строки needle в haystack
char *strtok(char *, const char *); преобразует строку в последовательность токенов. Не потоко-безопасная.
Понятие алгоритма — одно из основных понятий современной математики. Еще на самых ранних этапах ее развития ( Древняя Греция, Вавилон, Египет) в ней стали возникать процессы сугубо механического характера. Указанные процессы позволяли на базе исходных данных получать решение задачи с помощью определенных правил или инструкций. Со временем эти процессы получили название алгоритмы.
Сам термин алгоритм происходит от имени узбекского математика Аль-Харезми. Он в IX веке впервые сформулировал правила 4 математических действий в десятичной системе исчисления.
Процесс выполнения этих действий получил название «алгоризм».
С 1747 года вместо термина «алгоризм» стали употреблять «алгорисмус», понимая под этим комбинацию 4 действий (+ - * /)
С 1950 года вместо алгорисмуса стали употреблять алгорифм. Смысл этого термина наиболее часто связывали с алгорифмами Эвклида. Таким образом вплоть до 30-х годов ХХ века понятие алгоритма имело болше методологическое значение, чем математическое.
Под алгоритмом понимали четко сформулированную систему правил или инструкций, которые позволяли на базе исходных данных через конечное число шагов обеспечивать получение однозначного результата для решения того или иного класса задач.
Это определение является интуитивным (не строгим, не математическим), поскольку в нем не содержаться строгие характеристики того, что следует понимать под классами задач и методами их однозначного решения.
Математики довольно долго пользовались интуитивным представлением об алгоритмах и пока математика имело дело с числами и вычислениями, то и само понятие алгоритма отождествлялось с понятием метода вычислений. При этом не было серьезных случаев, когда математики разошлись бы во мнениях относительно того является ли алгоритм конкретно заданным математическим процессом или нет.
Положение существенно изменилось, когда на передний план выдвинулись алгоритмические проблемы, положительное решение которых оказалось сомнительным. Например, в XVII веке Готфрид Лейбниц пытался найти общий алгоритм решений любых математических задач. Этот грандиозный замысел не был осуществлен, но и не был забыт, и несколько позже приобрел другую, более конкретную форму: найти алгоритм проверки правильности любой теоремы при любой системе аксиом.
Таким образом, постепенно возникало предположение, что рассматриваемые задачи являются «алгоритмически неразрешими». Это привело к тому, что потребовалось четкая формулировка алгоритма.
Существование алгоритма можно доказать посредством его фактического описания, а алгоритмическую неразрешимость таким путем доказать невозможно, следовательно для этого необходимо иметь четкие математические представления об алгоритмах.
В 20-х годах ХХ века задача строго определения понятия алгоритма стала одной из центральных математических проблем.
Решение этой задачи было получено в середине 30-х годов в трудах таких авторов, как Гилберт, Гёдель, Гьюринг, Клини, Пост, Черг.
Отметим, что указанное решение было получено в двух формах. Первая основана на понятии особого класса алгоритмических целочисленных функций, которые в последствии назывались рекурсивными. А вторая основана на понятии строго определения понятия классов процесса.
В 50-х годах в работах Маркова и Калужина появилась несколько иная трактовка понятия алгоритма, основана на конструктивных отображениях между словами в абстрактных алфавитах.
Первоначально, теория алгоритмов возникла в связи с внутренними потребностями математики. В процессе развития в математических не числовых объектах (абстрактная алгебраическая теория, не Эвклидовая геометрия) возникла необходимость пересмотра самих принципов математических рассуждений (в частности при создании теории множеств традиционные рассуждения приводили к парадоксам).
Таким образом возник специфический раздел, где вместо традиционных используются финитные методы рассуждения (конечные действия, над конечным числом объектом).