В строке удалить последующие вхождения первой буквы - 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 для решения задачи удаления всех последующих вхождений первой буквы из строки. Вот список действий, которые выполняются в коде:

  1. Включаются необходимые заголовочные файлы:
    • stdio.h содержит функции для ввода и вывода данных
    • string.h содержит функции для работы со строками
  2. Определяется функция main(), которая является точкой входа в программу
  3. Создаются необходимые переменные:
    • fi - указатель на файл, который будет использоваться для чтения и записи
    • len - размер массива, который будет использоваться для хранения исходной и результирующей строк
    • source - массив для хранения исходной строки
    • result - массив для хранения результирующей строки
  4. Пробуется открыть файл str1.txt для чтения. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается с кодом возврата 1.
  5. Считывается исходная строка из файла в массив source с помощью функции fgets(). Первый символ исходной строки сохраняется в переменной en.
  6. Первый символ из исходной строки записывается в начало результирующей строки.
  7. Инициализируются переменные i и j, которые будут использоваться в цикле. Переменная i будет использоваться для индексации исходной строки, а переменная j - для индексации результирующей строки.
  8. В цикле записываются в результирующую строку только те символы исходной строки, которые не равны первому символу.
  9. Закрывается файл, открытый для чтения.
  10. Пробуется открыть файл str1.txt для записи. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается с кодом возврата 1.
  11. В файл, открытый для записи, записывается результирующая строка с помощью функции fprintf().
  12. Закрывается файл, открытый для записи.
  13. Возвращается код успешного завершения программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.667 из 5
Похожие ответы