Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
1

Удалить из строки все идентификаторы (нужно найти ошибку)

20.11.2018, 20:41. Просмотров 1246. Ответов 26
Метки нет (Все метки)

Нужно удалить все идентификаторы
УКАЗАТЕЛЬ PATH НЕ ПЕРЕДВИГАЕТСЯ ПО ВСЕЙ СТРОКЕ
Почему так?
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int digit(char* path) {
    int r = 0; //проверка на цифру
    for (int i = 0; path[i]; ++i) {
        if (isdigit(path[i]) || isalpha(path[i]) || path[i] == '_')
            r++;
    }
    if (r == strlen(path))
        return true;
    else false;
 
}
bool firstdigit(char* path) {
    //проверка на цифру
    for (int i = 0; path[i]; ++i)
    {
        if (isdigit(path[i]))
            return false;
        else
            return true;
    }
 
 
}
bool sravn(char sravn[], char* clovo)
{
    char * path;
    char r[12] = " ";
 
    path = strtok(sravn, r);
    while (path != NULL)
    {
        if (strcmp(path, clovo) == 0)
        {
            return false;
        }
        path = strtok(NULL, r);
    }
    return true;
}
int main()
{
    setlocale(LC_ALL, "");
    srand(time(NULL));
 
    char Arr[] = { "int float char double if else" };
    char temp[1000] = { "hjj767 ytty_787 66klll" }, A[1000] = {};
    char * path;
 
    cout << Arr;
 
 
    
 
    char *r= " ,./!?;:"\'";
 
    path = strtok(temp, r);
    while (path++ != 0)
    {
 
        if (digit(path))
        {
            if (firstdigit(path) && sravn(Arr, path))//если ко-во символов в текущем слове = сумме цифр и букв этого слова
                strcat(strcat(A, path), " ");//соединяю 
     
        }
         path = strtok(0, path);
    }
 
    cout << A;
 
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Я проверяю только первое слово и дальше не иду(
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2018, 20:41
Ответы с готовыми решениями:

Удалить все строки в двумерном массиве, содержащие только нечетные элементы. (Не могу найти ошибку.)
Задание: Удалить все строки в двумерном массиве, содержащие только нечетные элементы. Не могу...

Строки: найти и напечатать все идентификаторы с четным числом цифр в них
Задана последовательность идентификаторов (разделителем является запятая), оканчивающаяся точкой...

Нужно удалить все пустые строки
Написал процедуру, но как то криво работает. procedure TForm1.sSpeedButton35Click(Sender:...

Дается n чисел, нужно вывести сначала все нечетные а затем все четные (найти ошибку)
Дается n чисел, нужно вывести сначала все нечетные а затем все четные, я написал но на втором тесте...

26
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
20.11.2018, 20:57 2
1) В Функции digit вы не возвращаете значение в случае else
C++
1
2
3
if (r == strlen(path))
        return true;
    else false;
Не факт, что в этом проблема, только беглый взгляд.

2) Что должна делать программа? Вы уверены с выбором ветки? У вас от C++ только вывод в поток.
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
20.11.2018, 23:11  [ТС] 3
all_this_pain, Нужно удалить все идентификаторы в строке
0
1134 / 535 / 261
Регистрация: 17.11.2018
Сообщений: 1,354
20.11.2018, 23:54 4
vfhbf, ты бы показал пример исходной строки и то, что нужно получить из этой строки в конце. К примеру, зачем нужна строка с зарезервированными словами? Что с ней делать?
0
4 / 4 / 0
Регистрация: 10.11.2018
Сообщений: 25
21.11.2018, 00:24 5
Функция при объявлении возвращает int
C++
1
int digit(char* path)
А в теле возвращаешь bool ???

Добавлено через 14 минут
for (int i = 0; path[i]; ++i)
наверно надо так
for (int i = 0; i<strlen(path); ++i)
1
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
21.11.2018, 08:40  [ТС] 6
analo govnet, Чтобы в результатирующей строке не было зарезервированных слов
0
1134 / 535 / 261
Регистрация: 17.11.2018
Сообщений: 1,354
21.11.2018, 15:53 7
vfhbf, То есть, ни идентификаторов, ни зарезервированных слов? Я правильно понял?
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<stdlib.h>
#include<time.h>
#include<string.h>
#include<ctype.h>
 
using namespace std;
 
int main()
{
    char Arr[]      = "int float char double if else";
    char temp[1000] = "*if _hjj767 qwerty else asdf@asdf float& 66klll";
    char A[1000]    = "";
    char *r         = " ,.!?;:(){}[]|\/<>"; 
    char *d         = "~@#$%^&*'\'''\"'=-";
    char * path;
 
    cout << Arr << endl;
 
    path = strtok(temp, r);
    while(path != NULL)
    {
        if (isdigit(*path) || strpbrk(path, d)) 
            strcat(strcat(A, path), " ");
            
        path = strtok(NULL, r);
    }
 
    cout << A;
 
    return 0;
}
Надеюсь, что ничего не перепутал.
1
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
02.12.2018, 10:38  [ТС] 8
analo govnet, Скажите пожалуйста почему программа перестала работать как только я изменила ввод temp с помощью gets?

Добавлено через 1 минуту
analo govnet, Как только я изменила ввод temp с клавиатуры программа перестала работать. Почему так?
0
4 / 4 / 0
Регистрация: 10.11.2018
Сообщений: 25
02.12.2018, 13:29 9
Поменяй gets на
cin >> temp;
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
02.12.2018, 18:42  [ТС] 10
HamperC, Не прокатит в cin сохраняется все до пробела
0
1134 / 535 / 261
Регистрация: 17.11.2018
Сообщений: 1,354
02.12.2018, 23:01 11
Цитата Сообщение от vfhbf Посмотреть сообщение
Как только я изменила ввод temp с клавиатуры программа перестала работать. Почему так?
А что именно перестало работать? Дело в том, что я не экстрасенс и не могу по одному предложению понять, что там произошло.
Ты, хотя бы код, показала бы, что ли...
0
4 / 4 / 0
Регистрация: 10.11.2018
Сообщений: 25
02.12.2018, 23:41 12
тогда смотри
getline(cin, temp);

https://ru.cppreference.com/w/... ng/getline
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
03.12.2018, 07:43  [ТС] 13
analo govnet, Код тот же
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<stdlib.h>
#include<time.h>
#include<string.h>
#include<ctype.h>
 
using namespace std;
 
int main()
{
    char Arr[]      = "int float char double if else";
    char temp[1000] = " ";
    char A[1000]    = "";
    char *r         = " ,.!?;:(){}[]|\/<>"; 
    char *d         = "~@#$%^&*'\'''\"'=-";
    char * path;
 
    cout << Arr << endl;
 gets(temp);
    path = strtok(temp, r);
    while(path != NULL)
    {
        if (isdigit(*path) || strpbrk(path, d)) 
            strcat(strcat(A, path), " ");
            
        path = strtok(NULL, r);
    }
 
    cout << A;
 
    return 0;
}
Добавлено через 9 минут
analo govnet,
0
1134 / 535 / 261
Регистрация: 17.11.2018
Сообщений: 1,354
03.12.2018, 09:55 14
vfhbf, ошибки какие выдаёт? что пишет компилятор?
Вот ссылка https://onlinegdb.com/S1YufIG14 там всё работает.
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
03.12.2018, 10:47  [ТС] 15
analo govnet, Ошибок нет но в результатирующую строку не чего не присоединяется
0
Миниатюры
Удалить из строки все идентификаторы (нужно найти ошибку)  
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
03.12.2018, 10:49  [ТС] 16
analo govnet, Простите что достаю пыталась и по другому переделать ни как что-то эту задачу не осилю(
0
4 / 4 / 0
Регистрация: 10.11.2018
Сообщений: 25
03.12.2018, 11:10 17
getline(cin, temp);
0
1134 / 535 / 261
Регистрация: 17.11.2018
Сообщений: 1,354
03.12.2018, 12:03 18
Цитата Сообщение от vfhbf Посмотреть сообщение
Ошибок нет но в результатирующую строку не чего не присоединяется
vfhbf, так у тебя там все идентификаторы и зарезервированные слова, на картинке... что ты хочешь, что бы туда присоединилось?
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
03.12.2018, 12:14  [ТС] 19
analo govnet, Та нет первая строка это же char Arr[] = "int float char double if else";
Вывод ключевых а вторая которую ввожу с клавиатуры программа работает пропускает идентификаторы но просто слова без цифр и символов и не зарезервированные тоже пропускает
0
Миниатюры
Удалить из строки все идентификаторы (нужно найти ошибку)  
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
03.12.2018, 12:16  [ТС] 20
analo govnet, Уже совсем чуть-чуть осталось почти работает как надо но обычные слова тоже надо так-то добавить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2018, 12:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Логарифмы и не объявленные идентификаторы - найти ошибку в коде
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void main() { float x,y; //...

Нужно удалить все одинаковые строки в 2 ListBox - ах
Доброго времени суток! Прошу Вашей помощи, даны два заполненных listbox-а, нужно сравнить их на...

Нужно удалить все подстроки из исходной строки
Добрый день! Задача &quot;Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если...

ADO. Нужно удалить все строки с базы данных.
Ne znayu chego, no u menya ne poluchaetsya udalit` vse stroki iz bazy dannyh. Baza takaya:...

нужно найти ошибку..задача на строки.
нужно чтобы программа определяла является ли введенная строка шестнадцатеричным числом.. ...

Найти слово в строке, если найдено - удалить все строки ниже строки с найденным
Есть memo в котором храниться разное кол-во строк. Допустим: 100 строк, найти строку с фразой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.