Поиск символа в текстовом файле

lllenium

Как можно организовать поиск введенного символа в txt файле?
14 ответов

lllenium

lllenium, что именно вам нужно? Сколько раз встречается заданный символ? Или нужно заменить один символ на другой. Может быть, что-то еще?


lllenium

Нужно найти этот символ, и ту строку где он находится перенести в конец txt файла.


lllenium

lllenium, смотрите код ниже. Я ищу ту строчку, в которой этот символ встречается впервые.
#include <iostream>
#include <cmath>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int k, p, min;
    string a, b;
    k = 0;
    min = 100;
    while(getline(fin, a))
    {
        for (int i = 0; i < a.length(); i++)
        {
            if (a[i] == '*') //Здесь ваш символ
            {
                p = k;
                if (p <= min) 
                {
                    min = p;
                    b = a;
                }
                break;
            }
        }
        fout << a << endl;
        k++;
    }
    fout << b << endl;
    fin.close();
    fout.close();
    system("pause"); 
    return 0;   
}


lllenium

Спасибо большое А как сделать, чтобы пользователь при запуске программы сам вводил искомый символ?


lllenium

lllenium, ниже код с учетом ваших пожеланий.
#include <iostream>
#include <cmath>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int k, p, min;
    string a, b;
    char sym;
    cout << "Введите искомый символ: ";
    cin >> sym;
    k = 0;
    min = 100; //Здесь максимальное число строк файла
    while (getline(fin, a))
    {
        for (int i = 0; i < a.length(); i++)
        {
            if (a[i] == sym) //Здесь ваш символ
            {
                p = k;
                if (p <= min) 
                {
                    min = p;
                    b = a;
                }
                break;
            }
        }
        fout << a << endl;
        k++;
    }
    fout << b << endl;
    fin.close();
    fout.close();
    system("pause"); 
    return 0;   
}


lllenium

Fixer_84 простите за беспокойство, но мне снова нужна ваша помощь Нужно чтобы после ввода искомого символа, программа еще и предлагала пользователю сколько раз он хочет перенести строку, сейчас она переносит строку только один раз.


lllenium

lllenium, ниже ответ на ваш вопрос.
#include <iostream>
#include <cmath>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int k, p, min, N;
    string a, b;
    char sym;
    cout << "Введите искомый символ: ";
    cin >> sym;
    cout << "Сколько раз перенести строку: ";
    cin >> N;
    k = 0;
    min = 100; 
    while (getline(fin, a))
    {
        for (int i = 0; i < a.length(); i++)
        {
            if (a[i] == sym) 
            {
                p = k;
                if (p <= min) 
                {
                    min = p;
                    b = a;
                }
                break;
            }
        }
        fout << a << endl;
        k++;
    }
    for (int i = 0; i < N; i++)
    {
    fout << b << endl;
    }
    fin.close();
    fout.close();
    system("pause"); 
    return 0;   
}


lllenium

Благодарю!


lllenium

А можно ли сделать так, чтобы при вводе искомого символа, программа искала его сразу во всем txt файле и все строки с этим символом переносила в конец txt файла. Просто сейчас она ищет первый попавшийся


lllenium

Klla, конечно можно Вот программа, отвечающая на ваш вопрос.
#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string a, b;
    vector<std::string> c; 
    char sym;
    cout << "Введите искомый символ: ";
    cin >> sym; 
    while (getline(fin, a))
    {
        for (int i = 0; a[i]; i++)
        {
            if (a[i] == sym) 
            {
                b = a;
                c.push_back(b);
                break;
            }
        }
        fout << a << endl;
    }
    for (int i = 0; i < c.size(); i++)
    {
    fout << c[i] << endl;
    }
    fin.close();
    fout.close();
    system("pause"); 
    return 0;   
}


lllenium

Спасибо , но здесь отсутствует функция количества перевода строк("Сколько раз перенести строку"), мне она тоже нужна, доработайте код если вас это не затруднит).


lllenium

Klla, вот доработанная программа. Надеюсь, это то что нужно.
#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string a, b;
    vector<std::string> c; 
    char sym;
    int N, k;
    cout << "Введите искомый символ: ";
    cin >> sym; 
    cout << "Сколько раз перенести строки: ";
    cin >> N;
    while (getline(fin, a))
    {
        for (int i = 0; a[i]; i++)
        {
            if (a[i] == sym) 
            {
                b = a;
                c.push_back(b);
                break;
            }
        }
        fout << a << endl;
    }
    k = 0;
    while (k < N)
    {
    for (int i = 0; i < c.size(); i++)
    {
    fout << c[i] << endl;
    }
    k++;
    }
    fin.close();
    fout.close();
    system("pause"); 
    return 0;   
}


lllenium

Здравствуйте, не так давно вы по моей просьбе делали программу для поиска символа и переноса строк. Она работает, но она не переносит строку, а копирует ее и вставляет в конец. Нужно чтобы она именно переносила строку, т.е. если строка первая в txt файле и в ней нужный символ, строка переходит в конец txt файла.
#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <fstream>
#include <stdlib.h>
 
using namespace std;
 
int main()
{   
    setlocale(LC_ALL, "Russian");
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string a, b;
    vector<std::string> c;
    char sym;
    int N, k;
    cout << "Введите символ: ";
    cin >> sym;
    cout << "Сколько раз перенести строки?: ";
    cin >> N;
    while (getline(fin, a))
    {
        for (int i = 0; a[i]; i++)
        {
            if (a[i] == sym)
            {
                b = a;
                c.push_back(b);
                break;
            }
        }
        fout << a << endl;
    }
    k = 0;
    while (k < N)
    {
    for (int i = 0; i < c.size(); i++)
    {
    fout << c[i] << endl;
    }
    k++;
    }
    fin.close();
    fout.close();
    printf ("Строки с символами перемещены, для просмотра откройте выходной файл \n");
    system("pause");
    return 0;
}


lllenium

lllenium, никогда этого не делал. Вот программа. Надеюсь, она вас устроит.
#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string a, b;
    vector<std::string> c; 
    char sym;
    int N, k;
    cout << "Введите искомый символ: ";
    cin >> sym; 
    cout << "Сколько раз перенести строки: ";
    cin >> N;
    while (getline(fin, a))
    {
        for (int i = 0; a[i]; i++)
        {
            if (a[i] == sym) 
            {
                b = a;
                c.push_back(b);
                a = "\t"; 
                break;
            }
        }
        if (a != "\t")
        fout << a << endl;
    }
    k = 0;
    while (k < N)
    {
    for (int i = 0; i < c.size(); i++)
    {
    fout << c[i] << endl;
    }
    k++;
    }
    fin.close();
    fout.close();
    system("pause"); 
    return 0;   
}