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

Проверте, пожалуйста, правильность программного кода - C++

Восстановить пароль Регистрация
 
Aleksashka
 Аватар для Aleksashka
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 38
11.07.2012, 19:04     Проверте, пожалуйста, правильность программного кода #1
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
#include "stdafx.h"
#include "string.h"
#include "iostream"
using namespace std;
int main()
{
    char text[200];
    char*slova[250];
    char*str=" ";
    char*tekst;
    int i=0;
    cout<<"V-te text: ";
    cin.getline(text,200);
    tekst=strcat(" ",text);
    char*t=" ";
    int min=strlen(tekst);
    int j=0;
    while(i<min)
    {
        slova[j]=strtok(text+i," ");
        i=i+strlen(slova[j])+1;
        j++;
    };
    min=strlen(slova[0]);
    char*slovo;
    for (i<j;i++;){
        if(strlen(slova[i])<min){
            min=strlen(slova[i]);
            slovo=slova[i];
        };
    };
    int k=0;
    for (i<j;i++;){
        if(!strstr(slova[i],slovo)==0){k++;};
    };
    cout<<"Samoe kotorkoe slovo vstechalos"<<k<<"raz";
    cin.get();cin.get();
    return 0;
}
Запускаю этот код в VS 2010, но результаты не вижу, т.к. постоянно появляется такое сообщение:
Необработанное исключение в "0x0f8ed2e9 (msvcr100d.dll)" в "текст.exe": 0xC0000005: Нарушение прав доступа при записи "0x00d578a1".

А также: Первый этап обработки исключения в "0x0f8ed2e9 (msvcr100d.dll)" в "текст.exe": 0xC0000005: Нарушение прав доступа при записи "0x00d578a1".
Необработанное исключение в "0x0f8ed2e9 (msvcr100d.dll)" в "текст.exe": 0xC0000005: Нарушение прав доступа при записи "0x00d578a1". - в окне Вывода. Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2012, 19:04     Проверте, пожалуйста, правильность программного кода
Посмотрите здесь:

C++ Правильность и рациональность кода
C++ проверка кода на правильность
C++ Проверка на правильность кода
Упрощение программного кода C++
Проверьте правильность кода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:09     Проверте, пожалуйста, правильность программного кода #2
DELDEL

Добавлено через 2 минуты
Цитата Сообщение от Aleksashka Посмотреть сообщение
tekst=strcat(" ",text);
- вот эта строка сомнительна
Aleksashka
 Аватар для Aleksashka
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 38
11.07.2012, 20:29  [ТС]     Проверте, пожалуйста, правильность программного кода #3
и что в ней нужно поменять?
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:34     Проверте, пожалуйста, правильность программного кода #4
Вобщем я подумал и решил написать свой код по поиску числа вхождений в текст слова с мин длинной (как я понял задание стоит именно так)
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
#include <string>
#include <iostream>
using namespace std;
 
//Функция возвращает число слов в блоке str разделённых символами delim
//если words != NULL в неё происхоит запись слов (строки в 2-мерном массиве)
int getWords(char * str, char * delim, char **words);
 
int main()
{
    char text[1024] = {0};//Наш вводимый текст
    char ** words   = NULL;//Наш будующий массив со словами
    char delim[] = ".,-!? ";//Возможные разделители между словами
    int nWords   = 0;//Счётчик слов
    int index    = 0;//Будет содержать индекс слова с наименьшей длинной
    int i;//Счётчик
    int nCount   = 0;//Будет содержать в себе число слов с наименьшей длинной
    cout<<"Enter text : ";cin.get(text,1023);
    nWords = getWords(text, delim,words);
    //Выделяем память под массив слов
    words = new char * [nWords];
    //Записываем слова из text в массив words
    nWords = getWords(text, delim, words);
    for(i = 0; i < nWords; i++)
    {
        if(strlen(words[i]) < strlen(words[index]))
            index = i;
    }
    for(i = 0; i < nWords; i++)
    {
        if(strcmp(words[i],words[index]) == 0)
            nCount = nCount + 1;
    }
    cout<<"Word with min lengh : "<<words[index]<<endl;
    cout<<"Input text contain  : "<<nCount<<" words with min len\n";
    system("pause");
    //память не чищу её ОС сама за программой почистит
    return 0;
}
 
int getWords(char * str, char * delim, char **words)
{
    int nWords = 0;
    char * buf = NULL;//Указатель на буффер текста
    char * word= NULL;//Указатель на текущее слово
    if(str != NULL)
    {
        buf = new char[strlen(str) + 1];
        strcpy(buf, str);
        for(word = strtok(buf, delim); word != NULL; word = strtok(NULL, delim))
        {
            if(words != NULL)
            {
                words[nWords] = new char[1 + strlen(word)];
                strcpy(words[nWords], word);
            }
            nWords = nWords + 1;
        }
    }
    return nWords;
}
Миниатюры
Проверте, пожалуйста, правильность программного кода  
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:37     Проверте, пожалуйста, правильность программного кода #5
PS:
Цитата Сообщение от Aleksashka Посмотреть сообщение
min
- который раз уже вижу - люди min - это имя функции стандартной библиотеки, ну вы же не называте переменные именами cin cout sin cos и т.д. сколько будете на теже грабли наступать?

Aleksashka, всматриваясь в алгоритм нашё ещё много недочётов, если задание звучит именно так
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
поиску числа вхождений в текст слова с мин длинной
лучше используй или измени под себя мой код, твой не годиться
Aleksashka
 Аватар для Aleksashka
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 38
11.07.2012, 20:37  [ТС]     Проверте, пожалуйста, правильность программного кода #6
Задание вот какое:

Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в нем самое короткое слово.

Я на паскале программу написать смог, а вот на С++ уже проблемы
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:39     Проверте, пожалуйста, правильность программного кода #7
http://codepad.org/dttqE9fe

Добавлено через 47 секунд
Цитата Сообщение от Aleksashka Посмотреть сообщение
Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в нем самое короткое слово.
- ну вот используй мой код, только вбей в самом начале main setlocale(LC_ALL,"RUS");
Aleksashka
 Аватар для Aleksashka
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 38
11.07.2012, 20:41  [ТС]     Проверте, пожалуйста, правильность программного кода #8
мне трудно переделать, потому что я С++ вообще не понимаю...(
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:44     Проверте, пожалуйста, правильность программного кода #9
Цитата Сообщение от Aleksashka Посмотреть сообщение
мне трудно переделать, потому что я С++ вообще не понимаю...(
- друг я готовый код тебе дал, прочти ещё раз
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и решил написать свой код по поиску числа вхождений в текст слова с мин длинной (как я понял задание стоит именно так)
С русским только грабли локаль как то криво рссифицирует (т.е на латинице 100% отрабатывает а для русского надо костыли писать)
Aleksashka
 Аватар для Aleksashka
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 38
11.07.2012, 20:45  [ТС]     Проверте, пожалуйста, правильность программного кода #10
я сейчас ввел русский текст английскими буквами, все отлично работает
спасибо за помощь
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:46     Проверте, пожалуйста, правильность программного кода #11
Короче чтобы поменьше слов и побольше дела - вот код с костылём system("chcp 1251");
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
#include <string>
#include <iostream>
using namespace std;
 
//Функция возвращает число слов в блоке str разделённых символами delim
//если words != NULL в неё происхоит запись слов (строки в 2-мерном массиве)
int getWords(char * str, char * delim, char **words);
 
int main()
{
    system("chcp 1251");
    char text[1024] = {0};//Наш вводимый текст
    char ** words   = NULL;//Наш будующий массив со словами
    char delim[] = ".,-!? ";//Возможные разделители между словами
    int nWords   = 0;//Счётчик слов
    int index    = 0;//Будет содержать индекс слова с наименьшей длинной
    int i;//Счётчик
    int nCount   = 0;//Будет содержать в себе число слов с наименьшей длинной
    cout<<"Enter text : ";cin.get(text,1023);
    nWords = getWords(text, delim,words);
    //Выделяем память под массив слов
    words = new char * [nWords];
    //Записываем слова из text в массив words
    nWords = getWords(text, delim, words);
    for(i = 0; i < nWords; i++)
    {
        if(strlen(words[i]) < strlen(words[index]))
            index = i;
    }
    for(i = 0; i < nWords; i++)
    {
        if(strcmp(words[i],words[index]) == 0)
            nCount = nCount + 1;
    }
    cout<<"Word with min lengh : "<<words[index]<<endl;
    cout<<"Input text contain  : "<<nCount<<" words with min len\n";
    system("pause");
    //память не чищу её ОС сама за программой почистит
    return 0;
}
 
int getWords(char * str, char * delim, char **words)
{
    int nWords = 0;
    char * buf = NULL;//Указатель на буффер текста
    char * word= NULL;//Указатель на текущее слово
    if(str != NULL)
    {
        buf = new char[strlen(str) + 1];
        strcpy(buf, str);
        for(word = strtok(buf, delim); word != NULL; word = strtok(NULL, delim))
        {
            if(words != NULL)
            {
                words[nWords] = new char[1 + strlen(word)];
                strcpy(words[nWords], word);
            }
            nWords = nWords + 1;
        }
    }
    return nWords;
}
Миниатюры
Проверте, пожалуйста, правильность программного кода  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 20:49     Проверте, пожалуйста, правильность программного кода
Еще ссылки по теме:

Оптимизация программного кода C++
Правильность кода C++
C++ Замер времени выполнения программного кода

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
11.07.2012, 20:49     Проверте, пожалуйста, правильность программного кода #12
Цитата Сообщение от Aleksashka Посмотреть сообщение
я сейчас ввел русский текст английскими буквами, все отлично работает
спасибо за помощь
не зацени последний код там благодаря system("chcp 1251") можно и с русским работатьВ Release думаю русский всё равно вылезет каракулями, поэтому возможно потребуется настройка шрифта приложения, см сюда Создание файла в UTF-8 кодировке
Yandex
Объявления
11.07.2012, 20:49     Проверте, пожалуйста, правильность программного кода
Ответ Создать тему
Опции темы

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