В строке удалить последующие вхождения первой буквы - C (СИ) (74057)
Формулировка задачи:
[Только начала изучение си. Нужно в строке удалить последующие вхождения первой буквы. Написала программу и не могу понять, почему не выводится результат на экран
#include <stdio.h>
#include <string.h>
int main(void)
{
char source[100];
char result[100];
char en[1];
int i,len;
printf("liza");
scanf("&s",source);
en[0]=source[0];
for (i=1;i<=100;i++)
{
if (en[0]!=source[i])
{
result[i]=source[i];
}
}
printf("result is:%s",result);
return 0;
}Решение задачи: «В строке удалить последующие вхождения первой буквы»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main( void ) {
FILE* fi;
const int len = 100;
char source[ len ];
char result[ len ];
// пробуем открыть файл только для чтения
fi = fopen( "str1.txt", "r" );
if ( fi == NULL ) { // если не смогли открыть файл
printf( "File read error\n" ); // сообщаем об этом
return 1; // и выходим из программы
}
fgets( source, len, fi ); // это мы считываем строку.
char en = source[ 0 ]; // ТОЛЬКО потом мы можем запомнить ее первый символ
result[ 0 ] = en; // сразу его запишем в результирующую строку
int i, j; // в цикле в результирующую строку запишем только нужные символы
for ( i = 1, j = 1; i < len; ++i ) {
if ( en != source[ i ] )
result[ j++ ] = source[ i ];
}
fclose( fi ); // закроем файл
// пробуем открыть файл только для записи - если файл существовал ранее - он будет перезаписан
fi = fopen( "str1.txt", "w" );
if ( fi == NULL ) { // если не смогли открыть файл
printf( "File write error\n" ); // сообщаем об этом
return 1; // и выходим из программы
}
fprintf( fi, "result is : %s\n", result ); // пишем в файл результирующую строку
fclose( fi ); // закроем файл
return 0;
}
Объяснение кода листинга программы
В этом коде используется язык программирования C для решения задачи удаления всех последующих вхождений первой буквы из строки. Вот список действий, которые выполняются в коде:
- Включаются необходимые заголовочные файлы:
stdio.hсодержит функции для ввода и вывода данныхstring.hсодержит функции для работы со строками
- Определяется функция main(), которая является точкой входа в программу
- Создаются необходимые переменные:
fi- указатель на файл, который будет использоваться для чтения и записиlen- размер массива, который будет использоваться для хранения исходной и результирующей строкsource- массив для хранения исходной строкиresult- массив для хранения результирующей строки
- Пробуется открыть файл
str1.txtдля чтения. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается с кодом возврата 1. - Считывается исходная строка из файла в массив source с помощью функции
fgets(). Первый символ исходной строки сохраняется в переменнойen. - Первый символ из исходной строки записывается в начало результирующей строки.
- Инициализируются переменные i и j, которые будут использоваться в цикле. Переменная i будет использоваться для индексации исходной строки, а переменная j - для индексации результирующей строки.
- В цикле записываются в результирующую строку только те символы исходной строки, которые не равны первому символу.
- Закрывается файл, открытый для чтения.
- Пробуется открыть файл
str1.txtдля записи. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается с кодом возврата 1. - В файл, открытый для записи, записывается результирующая строка с помощью функции
fprintf(). - Закрывается файл, открытый для записи.
- Возвращается код успешного завершения программы.