Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Программа вылетает с ошибкой Access Violation


Автор: MOTOR4eGG 6.5.2009, 17:53
Всем привет
Задача у меня такая: нужно отсортировать слова по алфавиту в строке, и исключить повторение слов.
с сортировкой все нормально получилось через массив указателей, а для повторения нужен обычный массив
попробовал использовать функцию strcmp, доходит до нее и вылетает с ошибкой Access violation
Подскажите в чем ошибка, или как можно обойти strcmp и преобразовать массив указателей в обычный массив?
заранее благодарю

Код

#include <iostream>
#include <conio.h>
#include <iterator>
#include <string.h>
#include <stdio.h>
using namespace std;



void main()
{
    char str[100];
    int a(0);
    const char *mas[100];
    cout<<"Vvedite stroku   ";
    cin.getline(str,100);
    char *c;
    int j=0;
    c=strtok(str," ");
    while (c != NULL)
    {        
        mas[j]=c;
        c=strtok(NULL," ");
        j++;
    }
    
    int b=j;
    int z=0;
    const char *null;
    for(int s=0;s<b-1;s++)
    {
        for(int i=0;i<=b-2  ;i++)
        {
            if(*mas[i]>*mas[i+1])
            {
                null=mas[i];
                mas[i]=mas[i+1];
                mas[i+1]=null;
            }
        }
    }
    for(int i=1;i<=j;i++)
    {
        strcmp(mas[i-1],mas[i]); //здесь выдает ошибку
    }

    for(int r=0;r<=b;r++)
    {
        printf("%s   ", mas[r]);
    }    
    getch();
}

Автор: zim22 6.5.2009, 18:08
Цитата(MOTOR4eGG @  6.5.2009,  17:53 Найти цитируемый пост)
Задача у меня такая: нужно отсортировать слова по алфавиту в строке, и исключить повторение слов.

Код

#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
  std::string text("this is text really it is beautiful and i really love it");
  std::istringstream is(text);
  std::vector<std::string> vs((std::istream_iterator<std::string>(is)),
                               std::istream_iterator<std::string>());
  std::sort(vs.begin(), vs.end());
  std::vector<std::string>::iterator end_it = std::unique(vs.begin(), vs.end());
  vs.erase(end_it, vs.end());
  std::copy(vs.begin(), vs.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    return 0;
}


В условии измените <= на <
Код

for(int i=1;i<j;i++)
{
    strcmp(mas[i-1],mas[i]); //здесь выдает ошибку
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)