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

Строки в С++, не могу понять что неправильно в программе - C++

Восстановить пароль Регистрация
 
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 16:08     Строки в С++, не могу понять что неправильно в программе #1
Необходимо: 1) Найти количество слов в строке, 2) вывестии все слова в порядке возрастания длинн,
3) вычислить количество одинаковых строк в строке

моя программа:

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
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <conio.h>
 
void main()
{
 clrscr();
 int i,x,y,y2;
 char st[100], st2[100],sti[100];
 char *lex;
 cin.getline(st,100,'\n');                      //vvod stroki
 strcpy(st2,st);                                //stroka dlya 2-go yslovia
 
//1-й пункт
 cout<<"Ishodnaya stroka: "<<st<<endl;
 y=1;
 for(i=1;i<=strlen(st);i++)
  if (st[i]==' ')
   y+=1;
 cout<<"kolichestvo slov:  "<<y;
 
//2-й пункт
 i=1; strcpy(sti,""); y2=0;
 while (y2!=y)
 {
  strcpy(st2,st);
  lex=strtok(st2," ");
  while(lex!=NULL)
  {
   if (strlen(lex)==i)
   {
    y2++;
    strcat(sti,lex);
    strcat(sti," ");
   }
   lex=strtok(NULL," ");
  }
  i++;
 }
 cout<<"\niskomaia  stroka - "<<sti;
 
//3-й пункт
 strcpy(sti,"");  i=1; y2=0;
 strcpy(st2,st);
 lex=strtok(st2," ");
 
 for (int i=0; i<strlen(lex); i++)                                //сдесь компилятор матерится
 {
     for (int j=0; j<strlen(lex); j++)
     if (lex[i] == lex[j] && i!=j)
     {
        sti +=(" "+lex[j]);
         } 
 } 
 
 y=1;
 for(i=1;i<=strlen(sti);i++)
  if (sti[i]==' ')
   y+=1;
 cout<<"kolichestvo odinakovyx slov:  "<<y;
 
 getch();
}
собственно проблемы с третим пунктом задания.

прошу помощи, зарание спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 16:08     Строки в С++, не могу понять что неправильно в программе
Посмотрите здесь:

C++ не могу понять что не так
C++ пара мелких ошибочек в программе, не могу понять в чем((
строки в С++.. не могу их понять.. C++
не могу понять что с выводом C++
C++ Что неправильно в данной программе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 16:22     Строки в С++, не могу понять что неправильно в программе #2
Chif, посмотрите как можно легко бить текст на слова с помощью stringstream
написать программу, которая считывает три предложения и выводит их в обратном порядке.
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 16:34  [ТС]     Строки в С++, не могу понять что неправильно в программе #3
посмотрел, прочитал, не понял. или мне всю программу переделывать?
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 16:57     Строки в С++, не могу понять что неправильно в программе #4
Цитата Сообщение от Chif Посмотреть сообщение
посмотрел, прочитал, не понял. или мне всю программу переделывать?
Я уже это сделал(в вашем коде и iostream и strtok - это смесь плюсов и Си, в добавок в плюсах предпочтительней использовать string чем char str[])
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
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main()
{
    long i = 0,j, nWords = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî ñëîâ Гў ñòðîêå
    string str;
    string buf;
    string * pWords;
    stringstream ss;
    cout<<"Enter text : \n";
    getline(cin,str);//Âîò ГІГ*ГЄ ââîäèòñÿ string Г± ïðîáåëГ*ìè
    nWords = 0;
    ss.str(str);
    //Ñ÷èòГ*ГҐГ¬ ÷èñëî ñëîâ Гў ñòðîêå
    while(ss>>buf)
        nWords++;
    cout<<"Number words in string : "<<nWords<<endl;
    ss.clear();//Î÷èñòèëè ñòðèГ*ãïîòîê
    ss.str(str);//Г‘Г*îâГ* Г§Г*ГЇГЁГµГ*óëè Гў Г*ГҐГЈГ® ñòðîêó
    pWords = new string[nWords + 2];
    //Г‡Г*ïèñûâГ*ГҐГ¬ ñëîâГ* Гў Г¬Г*Г±Г±ГЁГў
    while(ss>>pWords[i])
        i++;
 
    int nSame = 0;//×èñëî îäèГ*Г*êîâûõ ñëîâ
    //ÑîðòèðîâêГ* ïðÿìûì âûáîðîì
    //ГЇГ® 1-Г¬ ГЎГіГЄГўГ*Г¬ ñëîâ + ïîäñ÷¸ò îäèГ*Г*êîâûõ
    for(i = 0    ;i <= nWords; i++)
    for(j = i + 1;j <= nWords; j++)
    {
        if(tolower(pWords[j][0]) < tolower(pWords[i][0]))
        {
            buf = pWords[i];
            pWords[i] = pWords[j];
            pWords[j] = buf;
        }
        if(strcmp(pWords[i].c_str(),pWords[j].c_str()) == 0)
            nSame++;
    }
    cout<<"Sorted words\n";
    for(i = 0    ;i <= nWords; i++)
        cout<<pWords[i]<<endl;
    cout<<"Number of same words : "<<nSame<<endl;
    delete [] pWords;
    system("pause");
    return 0;
}
PS:После введенного текста (при создании проекта на старых компиляторах ) Enter нужно нажать 2 раза
Миниатюры
Строки в С++, не могу понять что неправильно в программе  
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 17:03  [ТС]     Строки в С++, не могу понять что неправильно в программе #5
спасибо за листинг, буду разбераться.
-=ЮрА=-
24.11.2011, 17:13
  #6

Не по теме:

Chif, если Вам сложновато понять могу переделать под ваш ввод и чары

Цитата Сообщение от Chif Посмотреть сообщение
cin.getline(st,100,'\n');
- просто для string не нужно указывать число элементов- строка может быть произвольной длинны а так
Цитата Сообщение от Chif Посмотреть сообщение
char st[100]
мы сужаем диапазон ввода до 99 символов, вот

Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 17:24  [ТС]     Строки в С++, не могу понять что неправильно в программе #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Chif, если Вам сложновато понять могу переделать под ваш ввод и чары
хотелось бы), понимается с трудом да и прога почти готова - загвостка только под конец(я про свою прогу)
-=ЮрА=-
24.11.2011, 17:29
  #8

Не по теме:

Цитата Сообщение от Chif Посмотреть сообщение
загвостка только под конец(я про свою прогу)
- ладно сейчас подправлю вашу програмку, однако ваш код суржик - смесь Си и С++ (лучше не смешивать стандарты), но желание заказчика - закон)))

Chif
24.11.2011, 17:44  [ТС]
  #9

Не по теме:


я и не знал что это смесь, недавно изучать начал язык, и начал с С++, может книги не те или препод не ту теорию даёт)

-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 17:51     Строки в С++, не могу понять что неправильно в программе #10
Chif, не захотел я править ваш алгоритм он мне не нравится, притом тестирование показало что алгоритм сбоит. Вот код попроще попробуйте
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    char str[1024];//Áóäåò ñîäåðæГ*ГІГј ââåäåГ*Г*ûé ГІГҐГЄГ±ГІ
    char buf[1024];//ГЃГіГґГґГҐГ° äëÿ str
    char *tok;
    char delim[] = " ,;.!?";//ÂîçìîæГ*ûå Г°Г*çäåëèòåëè ìåæäó ñëîâГ*ìè
    
    cout<<"Enter text : \n";
    cin.getline(str,1024,'\n');                      
    strcpy(buf,str);                               
 
    int i = 0, j, nWords = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî ñëîâ
    //1-Г© ГЇГіГ*ГЄГІ
    cout<<"Ishodnaya stroka: "<<str<<endl;
    tok = strtok(buf,delim);
    while(tok)
    {
        nWords++;
        tok = strtok(NULL,delim);
    }
    cout<<"Number words in string : "<<nWords<<endl;
    
    //Г‘Г*îâГ* ГЁГ*èöèГ*ëèçèðóåì ГЎГіГґГґГҐГ° Г¤Г*Г*Г*ûìè ГЁГ§ str
    strcpy(buf,str);
 
    //ÑîçäГ*ВёГ¬ Г¬Г*Г±Г±ГЁГў ñëîâ
    string tmp;
    string * pWords = new string[nWords + 1];
    tok = strtok(buf,delim);
    while(tok)
    {
        pWords[i] = tok;
        tok = strtok(NULL,delim);
        i++;
    }
 
    int nSame = 0;//×èñëî îäèГ*Г*êîâûõ ñëîâ
    //ÑîðòèðîâêГ* ïðÿìûì âûáîðîì
    //ГЇГ® 1-Г¬ ГЎГіГЄГўГ*Г¬ ñëîâ + ïîäñ÷¸ò îäèГ*Г*êîâûõ
    for(i = 0    ;i < nWords; i++)
    for(j = i + 1;j < nWords; j++)
    {
        if(tolower(pWords[j][0]) < tolower(pWords[i][0]))
        {
            tmp = pWords[i];
            pWords[i] = pWords[j];
            pWords[j] = tmp;
        }
        if(strcmp(pWords[i].c_str(),pWords[j].c_str()) == 0)
            nSame++;
    }
    cout<<"Sorted words\n";
    for(i = 0    ;i < nWords; i++)
        cout<<pWords[i]<<endl;
    cout<<"Number of same words : "<<nSame<<endl;
    delete [] pWords;
    system("pause");
    return 0;
}
Миниатюры
Строки в С++, не могу понять что неправильно в программе  
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 17:55     Строки в С++, не могу понять что неправильно в программе #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(strcmp(pWords[i].c_str(),pWords[j].c_str()) == 0)
- так сравниваются строки(если значение 0 - то строки идентичны), на местах pWords[i].c_str() может стоять чаровская строка Читайте о ней здесь http://www.cplusplus.com/reference/c...string/strcmp/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2011, 18:04     Строки в С++, не могу понять что неправильно в программе
Еще ссылки по теме:

C++ Не могу что-то понять с указателями
C++ Что-то с циклом в программе не могу понять
Не могу понять где ошибка в программе C++

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

Или воспользуйтесь поиском по форуму:
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 18:04  [ТС]     Строки в С++, не могу понять что неправильно в программе #12
Спасибо.

Не по теме:


Я думал, что подкину кому-то работенки, а вышло наоборот, теперь придется разбираться посерьёзнее. Да, и за это тоже спасибо).

Yandex
Объявления
24.11.2011, 18:04     Строки в С++, не могу понять что неправильно в программе
Ответ Создать тему
Опции темы

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