puts (s1); // "Могу, хочу, "
Strcat (s1, s3); // дописать s3 вконец s1
puts (s1); // "Могу, хочу, надо!"
}
Заметьте, что если бы строка s1 была объявлена как s1[] (или с длиной меньше 18), произошел бы выход за границы массива с печальными последствиями.
Задача. Ввести с клавиатуры имя файла. Изменить его расширение на ".exe".
Алгоритм решения:
1. Найти в имени файла точку '.' или признак конца строки '\0'.
2. Если нашли точку, скопировать начиная с этого места новое расширение ".exe" (используем функцию strcpy).
3. Если нашли конец строки (точки нет), добавить в конец расширение ".exe" (используемфункцию strcat).
#include <stdio.h>
#include <string.h>
Main()
{
char s[80];
int n; // номерсимвола '.'
printf("Введитеимяфайла ");
gets (s);
n = 0;
while ((s[n]!= '.') // ищем первую точку
&& (s[n]!= '\0')) // или конец строки
n ++;
if (s[n] == '.') // если нашли точку, то...
strcpy (s+n, ".exe"); // меняем расширение,
else strcat (s, ".exe"); // иначедобавляем
puts (s);
}
Задача. Ввести с клавиатуры фамилию и имя в одну строку (допустим, "Иванов Вася"). Построить в памяти строку «Привет, Вася Иванов!».
Алгоритм решения этой задачи можно записать так:
В программе используется важное свойство массивов в языке Си (в том числе и символьных строк, которые являются массивами символов):
Если массив называется s, то запись s+i обозначает адрес элемента s[i] (так же, как и
&s[i]).Так как функциям strcpy и strcat надо передать адреса в памяти, куда и откуда переместить данные, мы можем использовать запись a+len вместо &a[len] и т.д.
#include <stdio.h>
#include <string.h>
Main()
{
char s[80], a[80] = "Привет, ";
int n, len;
printf("Введите фамилию и имя ");
gets (s);
n = 0;
while ((s[n]!= ' ') // ищемпервыйпробел
&& (s[n]!= '\0')) // или конец строки
n ++;
if (s[n]!= ' ') { // если нет пробела,...
printf("Неверная строка");