Форум программистов, компьютерный форум CyberForum.ru

Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 00:26     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #1
Дана строка латинских символов. Напечатать эту строку , предварительно заменив на «ks» первое вхождение
«x», если оно есть .
Пожалуйста,помогите написать

Добавлено через 15 минут
+ к этому:
1. Исходный текст находится в текстовом файле, имя которого вводится с клавиатуры .
2. Вывод результата осуществляется одновременно в текстовый файл, имя которого вводится с клавиатуры , и на
экран монитора.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2012, 00:26     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть
Посмотрите здесь:

Даны два действительных числа. Вывести первое число, если оно больше второго, и оба числа, если это не так. C++
В предложении удалить первое вхождение “w”, если такое есть C++
В списке Р заменить первое вхождение списка Р1 (если такое есть) на список Р2 C++
C++ Заменить первое число нулем, если оно меньше или равно второму
C++ Первое вхождение символа в строку. С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
09.06.2012, 00:30     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main(void)
{
    char str[256]={0};
    cout << "Enter string\n";
    cin.getline(str,256);
    for(int i = 0; i < strlen(str); i++)
    {
        if(str[i] == 'x' || str[i] == 'X')
        {
            cout << "ks";
        }
        else cout << str[i];
    }
 
    cout << endl;
 
    system("PAUSE");
    return 0;
}
Добавлено через 35 секунд
а файл результат или входной?
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 00:33     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #3
Вадян,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
int main(int argc, char *argv[]) {
    string s;
    string s1;
    cout << endl << "Enter the string:" << endl;
    cin >> s;
 
    size_t offset = s.find("ks");
    if (offset != -1) {
        s.erase(offset, 2);
        s.insert(offset, "x");
        cout << s << endl;
    }
 
    system("PAUSE");
    return 0;
}
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 00:34  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #4
Цитата Сообщение от Jazz411 Посмотреть сообщение
а файл результат или входной?
и то и то походу.. два текстовых файла создать нужно
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
09.06.2012, 00:54     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #5
Вводить только имя файла без формата, формат файла ".txt"
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
using namespace std;
 
int main(void)
{
    char str[256]={0};
    FILE* file = NULL;
 
    cout << "Enter name of file" << endl;
    cin.getline(str,256);
    cin.sync();
 
    if(!(file = fopen(strcat(str, ".txt"), "r")))
    {
        cout << "Can't open file" << endl;
        system("Pause");
        _exit(1);
    }
 
    memset(str,0,256);
 
    char rezult_file_name[256]={0};
    FILE* rezult = NULL;
 
    cout << "Enter name of rezult file" << endl;
    cin.getline(rezult_file_name, 256);
 
    while(!feof(file))
    {
        fscanf(file, "%s", str);
 
        if(!(rezult = fopen(strcat(rezult_file_name, ".txt"), "w+")))
        {
            cout << "Can't creat file" << endl;
            system("Pause");
            _exit(1);
        }
 
        for(int i = 0; i < strlen(str); i++)
        {
            if(str[i] == 'x' || str[i] == 'X')
            {
                fprintf(rezult, "%s", "ks");
                cout << "ks";
            }
            else 
            {
                fprintf(rezult, "%c", str[i]);
                cout << str[i];
            }
        }
 
        fprintf(rezult, "%c", ' ');
        cout << ' ';
    }
    cout << endl;
 
    system("PAUSE");
    return 0;
}
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 01:02  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #6
Огромной спасибо!!!

Добавлено через 5 минут
А как сделать,чтобы он только первое вхождение x заменял,а не все?
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 01:45     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #7
Вадян,
Цитата Сообщение от Вадян Посмотреть сообщение
А как сделать,чтобы он только первое вхождение x заменял,а не все?
Дык а разве он все заменяет? У меня только первое.

Jazz411, а у Вас данный код работает? У меня он замену "ks" почему-то не производит...
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 01:55  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #8
Добавлено через 31 секунду
Цитата Сообщение от The_Immortal Посмотреть сообщение
Дык а разве он все заменяет? У меня только первое.
у меня все заменяет..
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:01     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #9
Вадян, странно...

Ну в общем, я вот так накидал, потестируйте.


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
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main(int argc, char *argv[]) {
    string s;
    char outfile[256];
    char inputfile[256];
 
    cout << "Enter filename (including \".txt\"): ";
    cin >> inputfile;
    ifstream fin(inputfile);
    if (fin.is_open()) {
 
        while (!fin.eof())
            s += fin.get();
        fin.close();
 
    }
    else {
        cout << "Trouble with opening the file" << endl;
        system("Pause");
    }
 
    s = s.erase(s.length() - 1, 1);
    size_t offset = s.find("ks");
    if (offset != -1) {
 
        cout << "Enter the name of output file (including \".txt\"): ";
        cin >> outfile;
        s.erase(offset, 2);
        s.insert(offset, "x");
        cout << s << endl;
        fstream file;
        file.open(outfile, ios::out);
        file << s;
 
    }
 
    system("PAUSE");
    return 0;
 
}
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:06     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #10
Цитата Сообщение от Вадян Посмотреть сообщение
у меня все заменяет..
Вот последний код от Jazz411 у меня так срабатывает (т.е. никак):

Jazz411, в чем фишка?
Миниатюры
Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть  
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 02:10  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #11
Не хочет из файла читать
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:12     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #12
Вадян, вот попробуйте мой файл

Соответственно в программе введите "input.txt".

А мне вышлите свой, который "не хочет".
Вложения
Тип файла: txt input.txt (8 байт, 5 просмотров)
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:16     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #13
Цитата Сообщение от The_Immortal Посмотреть сообщение
в чем фишка?
Фишка в том, что мне надо было читать внимательнее задание Я наоборот меняю x на ks

Вот поправил:

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
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main(int argc, char *argv[]) {
    string s;
    char outfile[256];
    char inputfile[256];
 
    cout << "Enter filename (including \".txt\"): ";
    cin >> inputfile;
    ifstream fin(inputfile);
    if (fin.is_open()) {
 
        while (!fin.eof())
            s += fin.get();
        fin.close();
 
    }
    else {
        cout << "Trouble with opening the file" << endl;
        system("Pause");
    }
 
    s = s.erase(s.length() - 1, 1);
    size_t offset = s.find("x");
    if (offset != -1) {
 
        cout << "Enter the name of output file (including \".txt\"): ";
        cin >> outfile;
        s.erase(offset, 1);
        s.insert(offset, "ks");
        cout << s << endl;
        fstream file;
        file.open(outfile, ios::out);
        file << s;
 
    }
 
    system("PAUSE");
    return 0;
 
}
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 02:19  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #14
вот он)
Вложения
Тип файла: txt inputfile.txt (8 байт, 5 просмотров)
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:28     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #15
Вадян, ну... вот результ (последнего кода):
Миниатюры
Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть  
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 02:37  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #16
мне пишет trouble with opening file

Добавлено через 2 минуты
а не,все норм!)) Спасибо!
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:39     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #17
Вадян, какой компилятор?

Вот если надо код Jazz411 (исправляет только первый x). Вроде

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
using namespace std;
 
bool stop = false;
 
int main(void) {
    char str[256] = {0};
    FILE* file = NULL;
 
    cout << "Enter name of file" << endl;
    cin.getline(str, 256);
    cin.sync();
 
    if (!(file = fopen(strcat(str, ".txt"), "r"))) {
        cout << "Can't open file" << endl;
        system("Pause");
        _exit(1);
    }
 
    memset(str, 0, 256);
 
    char rezult_file_name[256] = {0};
    FILE* rezult = NULL;
 
    cout << "Enter name of rezult file" << endl;
    cin.getline(rezult_file_name, 256);
 
    while (!feof(file)) {
        fscanf(file, "%s", str);
 
        if (!(rezult = fopen(strcat(rezult_file_name, ".txt"), "w+"))) {
            cout << "Can't creat file" << endl;
            system("Pause");
            _exit(1);
        }
 
        for (int i = 0; i < strlen(str); i++) {
            if ((str[i] == 'x' || str[i] == 'X') && !stop) {
                if (!stop) {
                    fprintf(rezult, "%s", "ks");
                    cout << "ks";
                    stop = true;
                }
 
            }
            else {
                fprintf(rezult, "%c", str[i]);
                cout << str[i];
            }
        }
 
        fprintf(rezult, "%c", ' ');
        cout << ' ';
    }
    cout << endl;
 
    system("PAUSE");
    return 0;
}
Протестируйте плиз.
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 02:48  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #18
Visual studio )
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
09.06.2012, 02:51     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #19
Вадян, VS зло, переходите на Билдер! //ох меня заклюют!...))
В общем, траблу вроде как решили...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2012, 02:52     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть
Еще ссылки по теме:

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Вадян
1 / 1 / 0
Регистрация: 25.05.2012
Сообщений: 42
09.06.2012, 02:52  [ТС]     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть #20
ок) еще раз огромное спасибо!
Yandex
Объявления
09.06.2012, 02:52     Напечатать строку, предварительно заменив на «ks» первое вхождение «x», если оно есть
Ответ Создать тему
Опции темы

Текущее время: 06:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru