Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Замена заданных символов в файле

здравствуйте, есть задача: написать программу, которая осуществляет замену заданных символов в строке или указанном файле.
с unix никогда не работала, с чего нужно начать? если обычно пишу программы на вижал студио, то тут вообще не знаю, где брать компилятор и вообще что делать? заранее спасибо за ответ.
Ответ: del
Вопрос: Удалить из текста, находящегося в файле, все строки, начинающиеся с заданного символа

удалить из текста, находящегося в файле все строки начинающиеся с заданного символа
Помогите пожалуйста не могу решить
Ответ:
Сообщение от boychenko1997
удалить из текста, находящегося в файле все строки начинающиеся с заданного символа
А у меня другая идея. Вообще без цикла. в 3 строки. С помощью file считать и с помощью регулярки функции (preg_grep) выбрать все слова не начинающиеся с того символа , который под запретом.

Убираем все слова или предложения , начинающиеся с буквы t | T
PHP
1
2
3
4
$file = file("text.txt");
$m = preg_grep("~^[^t]+~i",$file);
$a = implode("",$m);
file_put_contents("text.txt",$a);
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//До
Array
(
    [0] => dwdwdwefewfwegwgwg
 
    [1] => tytytuyjyjyjyjyjyjyj
 
    [2] => dfgfgrthththththththt
 
    [3] => bgbgnnhmhmhmhmhmhmyyjy
 
    [4] => kkkokokomomommomomom
 
    [5] => rrrgrththththththththth
 
    [6] => p.p.p,p,gorgrgrgrgrgrgrg
 
    [7] => bttghthththththththth
 
    [8] => tthththththhyhyhyhyhyh
)
//После
Array
(
    [0] => dwdwdwefewfwegwgwg
 
    [2] => dfgfgrthththththththt
 
    [3] => bgbgnnhmhmhmhmhmhmyyjy
 
    [4] => kkkokokomomommomomom
 
    [5] => rrrgrththththththththth
 
    [6] => p.p.p,p,gorgrgrgrgrgrgrg
 
    [7] => bttghthththththththth
 
)
Вопрос: Удалить из сообщения все слова, которые заканчиваются на заданный символ

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Удалить из сообщения все слова, которые заканчиваются на заданный символ. При решении задач использовать класс StringBuilder.
Ответ: /*
* Дана строка, в которой содержится осмысленное текстовое сообщение.
* Слова сообщения разделяются пробелами и знаками препинания.
* Удалить из сообщения все слова, которые заканчиваются на заданный сим
вол.
* При решении задач использовать класс StringBuilder.
*/


/*
* , в которой содержится осмысленное текстовое сообщение.
* сообщения разделяются пробелами и знаками препинания.
* Удалить из сообщения все , которые заканчиваются заданный символ.
* При решении задач использовать класс StringBuilder.
*/
Для продолжения нажмите любую клавишу . . .
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        public static void Main(string[] args)
        {
            string text = @"/*
         * Дана строка, в которой содержится осмысленное текстовое сообщение.
         * Слова сообщения разделяются пробелами и знаками препинания.
         * Удалить из сообщения все слова, которые заканчиваются на заданный символ.
         * При решении задач использовать класс StringBuilder.
         */";
 
            char ch = 'а';
            string pattern = @"\w+?(" + ch + @")(?=[\.\,\s]{1,})";
            Regex rgx = new Regex(pattern);
            StringBuilder result = new StringBuilder(rgx.Replace(text, ""));
 
            Console.WriteLine(text + "\n\n");
            Console.WriteLine(result);
        }
/*
* Дана строка, в которой содержится осмысленное текстовое сообщение.
* Слова сообщения разделяются пробелами и знаками препинания.
* Удалить из сообщения все слова, которые заканчиваются на заданный сим
вол.
* При решении задач использовать класс StringBuilder.
*/


/*
* в которой содержится осмысленное текстовое сообщение.
* сообщения разделяются пробелами и знаками препинания.
* Удалить из сообщения все которые заканчиваются заданный символ.
* При решении задач использовать класс StringBuilder.
*/
Для продолжения нажмите любую клавишу . . .
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        public static void Main(string[] args)
        {
            string text = @"/*
         * Дана строка, в которой содержится осмысленное текстовое сообщение.
         * Слова сообщения разделяются пробелами и знаками препинания.
         * Удалить из сообщения все слова, которые заканчиваются на заданный символ.
         * При решении задач использовать класс StringBuilder.
         */";
 
            char ch = 'а';
            string pattern = @"\w+?(" + ch + @")([\.\,\s]{1,})";
            Regex rgx = new Regex(pattern);
            StringBuilder result = new StringBuilder(rgx.Replace(text, ""));
 
            Console.WriteLine(text + "\n\n");
            Console.WriteLine(result);
        }
Вопрос: Проверить содержит ли строка хотя бы один заданный символ

Проверить, содержит ли строка хотя бы один заданный символ
Ответ:
C#
1
Console.WriteLine("{0}",(("Та самая строка".Intersect("Заданные символы").Count()!=0)?"Да":"Нет"));
При сотрудничестве с using System.Linq;
Вопрос: Переписать в отдельный текстовый файл строки, содержащие заданный символ не более одного раза

Необходимо написать программу,которая будет сохранять в отдельный текстовый документ строки содержащие заданный. символ не более одного раза.
Входные данные: текстовый документ со строками
Выходные данные: текстовый документ содержащий строки с заданным символом не более одного раза.

Добавлено через 1 час 44 минуты
Решил сам , вот код кому интересно
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var
  input, output: text;
  Name,str,str2: string;
  Ch,ch2: char;
  I,j: integer;
  Result: Boolean;
 
begin
  writeln('Заданный символ');
  readln(ch2);
Assign (input, 'F:\IPA\input.txt');
  Reset (input);
  Assign (output,'F:\IPA\output.txt');
  Rewrite (output);
 
  Result := IOResult = 0;
  if Result then begin
 
   while not eof(input) do
 
   begin
   readln(input,str2);
     for j:= 1 to length(str2)  do
          if str2[j]=ch2 then inc(i);
       
 
         if i <= 1  then begin
       
         writeln(output,str2);
         end;
        
         str:=''   ;
         i:=0;
    end;
  end
  else
    writeln('файла нет');
 
  close(input);
  close (output);
  readln;
end.
Ответ: небольшая оптимизация
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
    f, g: Text;
    s: String;
    c: Char;
    i, count: Byte;
begin
    Assign(f, 'f.txt'); Reset(f);
    Assign(g, 'g.txt'); Rewrite(g);
    Write('Введите контрольный символ: '); ReadLn(c);
    while (Not EoF(f)) do
    begin
        ReadLn(f, s);
        count := 0;
        i := 1;
        while ((i <= Length(s)) And (count < 2)) do
        begin
            Inc(count, Ord(s[i] = c));
            Inc(i);
        end;
        if (count < 2)
        then
            WriteLn(g, s);
    end;
    Close(f); Close(g);
end.
Вопрос: Поменять местами части строк до заданного символа и после него (без Copy)

Написал программу, которая меняет части строк до появления заданного символа и после. Нужна программа чтобы без использования <copy>, хотя с ним все намного проще...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
program kontr4;
var
  i,k,l: integer;
  F1, F2: text;
  ch: char;
  str,str1,str2: string;
  t: boolean;
begin
  assign(f1,paramstr(1));
  reset(f1);
  assign(f2,paramstr(2));
  ReWrite(f2);
  Writeln('input char');
  readln(ch);
  i:=1;
  k:=1;
  while not EOF(f1) Do
    begin
        readln(f1,str);
        for i:=1 to length(str) do
                    if str[i]=ch then begin
            t:=true;
            k:=i;
            Break;
            end;
                str1:=copy(str,1,k-1);
                str2:=copy(str,k,length(str)-k);
                if t=true then begin
                   write(f2,str2);
                   writeln(f2,str1);
                   end
                   else writeln(f2,str);
                t:=false;
                end;
  close(f2);
  close(f1);
  Writeln('Program done, open the file');
  readln
end.
Ответ: metropolit76, Ваша программа искажает результат и выводит что-то не то.

Входной файл:
sdfaghjaklz
Выходной файл:
aghjaklsdf

Неувязочка, однако. Так что написано у Вас много, но, очевидно, наверняка неверно. С применением стандартных функций работы со строками будет действительно проще:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var f1, f2: text;
    c: char;
    p: integer;
    s: string;
 
begin
  assign(f1, paramstr(1));
  reset(f1);
  assign(f2, paramstr(2));
  rewrite(f2);
  write('Input char: ');
  readln(c);
  while not eof(f1) do
    begin
      readln(f1, s);
      p :=  pos(c, s);
      if p > 0
        then writeln(f2, copy(s, p + 1, length(s) - 1) + s[p] + copy(s, 1, p - 1))
        else writeln(f2, s)
    end;
  close(f1);
  close(f2);
  write('Program done, open the file.');
  readln
end.
Ну и, без copy и pos вот так можно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var f1, f2: text;
    c: char;
    i, p: integer;
    s: string;
 
begin
  assign(f1, paramstr(1));
  reset(f1);
  assign(f2, paramstr(2));
  rewrite(f2);
  write('Input char: ');
  readln(c);
  while not eof(f1) do
    begin
      p := 0;
      readln(f1, s);
      for i := 1 to length(s) do
        if s[i] = c
          then begin
            p := i;
            break
          end;
      if p > 0
        then begin
          for i := p + 1 to length(s) do write(f2, s[i]);
          write(f2, s[p]);
          for i := 1 to p - 1 do write(f2, s[i]);
          writeln(f2)
        end
        else writeln(f2, s)
    end;
  close(f1);
  close(f2);
  write('Program done, open the file.');
  readln
end.
Вопрос: Зашифровать строку заменой исходных символов на символы с кодом, большим на три единицы

Помогите пожалуйста перевести программу из Pascal в Си

Вот сама задача: Зашифровать введенную с клавиатуры строку заменой исходных символов на символы с кодом, большим на три единицы. Провести дешифровку.

А это программа в Pascal:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const 
  n=3;
var
  i, len : integer;
  s: string;
begin
  readln(s);
  len := length(s);
  for i:=1 to len do
    s[i] := chr(ord(s[i])+n);
  writeln('Зашифрованная строка ', s);
 
  for i:=1 to len do
    s[i] := chr(ord(s[i])-n);
  writeln('Исходная строка ', s);
end.
Ответ: Перевел самое банальное , а с "s[i] := chr(ord(s[i])+n);" скорее всего нужно будет добавить функцию которая добавляет к каждому отдельному символу n... потому что chr и ord в си аналогов - нет.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
int main(){
system("chcp 1251");
system("cls");
int n=3;
int i;
char s[61];
gets(s);
???
for (i=0; i<???; i++)
???
printf("Зашифрованная строка: %s", s);
 
for (i=0; i<??; i++)
???
printf("Исходная строка: %s", s);
}
Вопрос: Вывести слова начинающиеся с заданного символа

решить задачу с помощью цикла while! (c++)
с клавиатуры вводится текст, заканчивающийся точкой. Вывести слова этого текста, начинающиеся с заданного символа.
Ответ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
#include <cctype>
 
int main()
{
    std::string str{};
    std::getline(std::cin, str);
    char Ch = 'm'; // выводать слова начинающиеся с этого символа
    std::size_t idx{};
    bool isWord = false;
    while (idx < str.length())
    {
        // Если этот символ ещё не часть слова && (индекс буквы равен нулю || (индекс буквы любой другой && предыдущий символ пробел))
        //  && символ является допустимым для слова && символ равен тому который ищем, то... 
        if (!isWord && (!idx || (idx && isspace(str[idx - 1]))) && isalnum(str[idx]) && (str[idx] == Ch))
        {
            isWord = true;
            continue;
        }
        else if (isWord)
        {
            if (isalnum(str[idx])) std::cout << str[idx];
            else
            {
                isWord = false;
                std::cout << std::endl;
            }
        }
        ++idx;
    }
}
Вопрос: Найти в матрице количество вхождений заданного символа

найти в матрице количество вхождений заданного символа с в
каждый столбик , сформировать из полученных значений массив и
пронормировать полученные значения
Ответ: создадите матрицу, заполните её как вам нужно, а вот само уже формирование массива:
C++
1
2
3
4
5
int* mas = new int[m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(a[i][j]=='c')mas[j]++; //a[][] - матрица с вашими символами
for(int i=0;i<m;i++)cout<<"в столбце #"<<i<<" "<<mas[i]<<"символов С"; 
Вопрос: Удаление фигурных скобок из заданного текстового файла

Создать программу, которая удаляет фигурные скобки из заданного текстового файла.
Ответ: StringReplace самый простой вариант, меняем скобку выше код на пустой символ, в простом варианте.