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

Строки, нужно подправить код - C++

Восстановить пароль Регистрация
 
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
10.06.2013, 20:26     Строки, нужно подправить код #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
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <list>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std; 
typedef std::istream_iterator<std::string> ii;
 
int main()
{
    cout << "Put line: ";
    string line, new_line;
    getline(cin, line);
 
    stringstream str(line);
    list<string> w((ii(str)), ii());
 
    for (list<string>::iterator p = w.begin(); p != w.end(); )
    {
        if (isdigit((*p)[0]))
        {
            new_line += *p++;
            new_line.push_back(' ');
            continue;
        }
        unsigned i = 1;
        bool state = false;
        list<string>::iterator tmp = p++;
        for ( ; i < tmp->size(); ++i)
        {
            if (isdigit((*tmp)[i]))
            {
                w.erase(tmp);
                state = true;
                break;
            }
        }
        if (!state)
        {
            new_line += *tmp;
            new_line.push_back(' ');
        }
    }
 
    cout << new_line << endl;
    system("pause");
}
все работает. но:
во-первых, преподовательница сказала, что нельзя испольовать String, stringstream str(line)

вместо этого сказала про Char*

и во вторых, использовать фукнции

кто может помочь? времени в обрез ,а самому еще нужно несолько лаб доделать, исправте, пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 20:26     Строки, нужно подправить код
Посмотрите здесь:

c++ строки. подправить код C++
Немного подправить код C++
C++ Помогите подправить код
нужно подправить C++
Подправить код C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
10.06.2013, 23:37  [ТС]     Строки, нужно подправить код #2
нужно Stringstream и все, что с ним связанно, перевести в char

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
#include <iostream>
#include <list>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std; 
typedef istream_iterator<string> ii;
 
int main()
{
    cout << "Put line: ";
    string line, new_line;
    getline(cin, line);
 
    stringstream str(line);
    list<string> w((ii(str)), ii());
 
    for (list<string>::iterator p = w.begin(); p != w.end(); )
    {
        if (isdigit((*p)[0]))
        {
            new_line += *p++;
            new_line.push_back(' ');
            continue;
        }
        unsigned i = 1;
        bool state = false;
        list<string>::iterator tmp = p++;
        for ( ; i < tmp->size(); ++i)
        {
            if (isdigit((*tmp)[i]))
            {
                w.erase(tmp);
                state = true;
                break;
            }
        }
        if (!state)
        {
            new_line += *tmp;
            new_line.push_back(' ');
        }
    }
 
    cout << new_line << endl;
    system("pause");
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.06.2013, 00:03     Строки, нужно подправить код #3
у stringstream есть метод str(), который возвращает строку.
а чего вам надо - непонятно. в цикле какая-то муть со словами происходит. разъясните чтоли.
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
11.06.2013, 00:05  [ТС]     Строки, нужно подправить код #4
Цитата Сообщение от DU Посмотреть сообщение
у stringstream есть метод str(), который возвращает строку.
а чего вам надо - непонятно. в цикле какая-то муть со словами происходит. разъясните чтоли.
вот задание:
Из заданной последовательности слов удалить слова, содержащие числа.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.06.2013, 00:16     Строки, нужно подправить код #5
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <string>
#include <sstream>
 
using namespace std;
 
typedef istream_iterator<string> ii;
 
int main()
{
  string line = "aaa bbb d222 ccc";
  //cout << "Put line: ";
  //getline(cin, line);
  stringstream str(line);
  
  list<string> w((ii(str)), ii());
  string new_line;
  for (list<string>::iterator p = w.begin(); p != w.end(); ++p)
  {
    if (find_if(p->begin(), p->end(), &isdigit) == p->end())
    {
      new_line += new_line.empty() ? *p : (' ' + *p);
    }
  }
 
  std::cout << "new line = " << new_line << std::endl;
 
  system("pause");
  return 0;
}
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
11.06.2013, 00:20  [ТС]     Строки, нужно подправить код #6
Цитата Сообщение от DU Посмотреть сообщение
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <string>
#include <sstream>
 
using namespace std;
 
typedef istream_iterator<string> ii;
 
int main()
{
  string line = "aaa bbb d222 ccc";
  //cout << "Put line: ";
  //getline(cin, line);
  stringstream str(line);
  
  list<string> w((ii(str)), ii());
  string new_line;
  for (list<string>::iterator p = w.begin(); p != w.end(); ++p)
  {
    if (find_if(p->begin(), p->end(), &isdigit) == p->end())
    {
      new_line += new_line.empty() ? *p : (' ' + *p);
    }
  }
 
  std::cout << "new line = " << new_line << std::endl;
 
  system("pause");
  return 0;
}
на самом деле, я уже вот с этим кодом работаю:
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define DELIM " ,.?!:;"
 
char* find_digit(char* s, size_t n)
{
    size_t i;
    for(i = 0; i < n; ++i)
        if(isdigit(s[i])) return &s[i];
 
    return NULL;
}
 
int main()
{
    size_t n;
    char str[256];
    char* p_str;
 
    printf("input string: ");
    scanf("%255[^\n]", str);
 
    p_str = str;
 
    while(*p_str)
    {
        if(!strchr(DELIM, *p_str))
        {
            n = 0;
            do ++n; while(!strchr(DELIM, p_str[n]));
 
            if(find_digit(p_str, n)) memmove(p_str, p_str + n, strlen(p_str + n) + 1);
            else  p_str+= n;
        }
        else ++p_str;
    }
 
    printf("%s\n", str);
 
    return 0;
}
но вот не могу понять, для чего #define DELIM " ,.?!:;" и как вообще вся программа работает, не могли бы Вы объяснить, пожалуйста?
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.06.2013, 00:23     Строки, нужно подправить код #7
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
#include <iostream>
#include <cstring>
 
char* deleteWordsWithNumbers(char *str)
{
    char newStr[100] = {0};
    char *ptr = strtok(str, ",. ?!");
    do {
        bool isDigit = false;
        for (int i=0; ptr[i]; ++i)
            if (isdigit(ptr[i]))
            {
                isDigit = true;
                break;
            }
        if (!isDigit)
        {
            strcat(newStr, ptr);
            strcat(newStr, " ");
        }
    } while (ptr = strtok(0, ",. ?!"));
    strcpy(str, newStr);
    return str;
}
 
int main()
{
    char str[100] = {0};
    strcpy(str, "fdf dsd2s3d sdd 56ds");
    std::cout << deleteWordsWithNumbers(str) << '\n';
}
 Комментарий модератора 
Темы объединены.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2013, 01:17     Строки, нужно подправить код
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.06.2013, 01:17     Строки, нужно подправить код #8
Цитата Сообщение от MikeEl Посмотреть сообщение
испольовать String, stringstream str(line)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
 
using namespace std;
 
int main()
{
    string text = "He2llo world! 2Hello world! Fast2Furious World3 444";
    string word;
    istringstream iss(text);
    while (iss >> word)
        if ( any_of( begin(word), end(word), ::isdigit ) &&
            any_of( begin(word), end(word), ::isalpha ) )
            text.erase( text.find(word), word.size() );
    cout << text;
    return 0;
}

Цитата Сообщение от MikeEl Посмотреть сообщение
нельзя испольовать String, stringstream str(line)
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstring>
using namespace std;
bool HasDigitAndAlpha(char *text)
{
    int i = 0;
    bool digit = false, alpha = false;
    while (text[i] != '\0') {
        digit = digit || isdigit(text[i]);
        alpha = alpha || isalpha(text[i]);
        if (digit && alpha) return true;
        ++i;
    }
    return digit && alpha;
}
 
int main()
{
    char in_text[256], out_text[256] = {0};
    char *word;
    cin.getline(in_text, sizeof(in_text));
 
    word = strtok(in_text, " ");
    if (!HasDigitAndAlpha(word)) {
        strcat(out_text, word);
        strcat(out_text, " ");
    }
 
    while ( (word = strtok (nullptr, " ")) != nullptr) {
        if (HasDigitAndAlpha(word)) continue;
        strcat(out_text, word);
        strcat(out_text, " ");
    }
 
    cout << out_text;
    return 0;
}
Yandex
Объявления
11.06.2013, 01:17     Строки, нужно подправить код
Ответ Создать тему
Опции темы

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