Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 17:05   #1
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
Вопрос Удаление из строки слов меньше 4-х символов

Нужно ввести строки, удалить из них цифры, слова меньше 4-х символов и всё это вывести одной склеенной строкой. Проблема с удаления слов меньше 4-х символов. В чём проблема подскажите.
Заранее благодарна.

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
		
system("color F0");
char **str,**s,**s0,**s1,f,*u; 
int i,m,n,x,f4,d,t,r,ni,mi,p,sn,ss,c=0,G,j=0;  
system("cls");
printf("\n Введите количество строк : ");
scanf("%d",&m); m++;
printf("\n Введите количество элементов в строке : ");
scanf("%d",&n); 
r=n;
u=(char*)calloc(100,sizeof(char));
str=(char **)calloc(m,sizeof(char *));
for(i=0; i<n; i++)
str[i]=(char *)calloc((n+5),sizeof(char));
m--;
system("cls");
printf("\n Введите %3d строк не больше чем %3d символов\n",m,n);
for(i=0;i<m;i++)
{
 for(x=0;x<n;x++)
 {
  fflush(stdin);
  str[i][x]=_getche(); //
----> //Вот проблема
  if((str[i][x]!=' ' & str[i][x]!='1' & str[i][x]!='2' & str[i][x]!='3' & str[i][x]!='4' & str[i][x]!='5' & str[i][x]!='6' & str[i][x]!='7' & str[i][x]!='8' & str[i][x]!='9') & ((str[i][x-1]!=' ' & str[i][x+3]!=' ') | (str[i][x+1]!=' ' & str[i][x-3]!=' ') | (str[i][x+1]!=' ' & str[i][x-1]!=' ') | (str[i][x-2]!=' ' & str[i][x+2]!=' ') | (str[i][x-1]!=' ' & str[i][x+2]!=' ') | (str[i][x+1]!=' ' & str[i][x-2]!=' ')))
   {
   u[c]=str[i][x];
   c++;
   }  
 }                   //
  printf("\n"); 
}
printf(" Исходный текст :\n\n");
for(i=0;i<m;i++)
puts(str[i]);
printf("\n Изменённый текст :\n\n");
for(i=0;i<c;i++)
printf("%c",u[i]);
getch();
}

Последний раз редактировалось Stilet; 23.11.2015 в 13:44.
Axrik вне форума Ответить с цитированием
Старый 25.12.2011, 18:06   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

- Замените & и | на && и ||
- Что касается цифр, то
Замените:
Код:
(str[i][x]!=' ' & str[i][x]!='1' & str[i][x]!='2' & str[i][x]!='3' & str[i][x]!='4' & 
str[i][x]!='5' & str[i][x]!='6' & str[i][x]!='7' & str[i][x]!='8' & str[i][x]!='9')
Вот этим:
Код:
!isdigit(str[i][x])
Только #include <ctype.h> не забудьте вначале

Последний раз редактировалось 8Observer8; 25.12.2011 в 18:18.
8Observer8 вне форума Ответить с цитированием
Старый 25.12.2011, 18:15   #3
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Не помогает, пробовала
Axrik вне форума Ответить с цитированием
Старый 25.12.2011, 18:23   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Намудрили вы, конечно. У вас подход неправильный. Считайте сначала ваши строки в массив строк, а потом работайте с ним.

P.S. Хотя, лучше слово сохранять в во временный буфер (буквы без цифр) и если количество букв в буфере больше четырёх, то сохранить в массиве строк. А потом вывести.

Последний раз редактировалось 8Observer8; 25.12.2011 в 18:29.
8Observer8 вне форума Ответить с цитированием
Старый 25.12.2011, 19:20   #5
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Если можно, то уточните как это будет выглядеть
Axrik вне форума Ответить с цитированием
Старый 25.12.2011, 19:30   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Не думаю, что у меня хорошо получилось. Но как пример, пусть и не очень удачный, пойдёт:
Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAXLEN 100
#define BUFSIZE 100
#define WORDSIZE 4

int getline(char* s, int lim);

int main () {
    int len, i, j;
    char line[MAXLEN];
    char buf[BUFSIZE];
    int fready;   // 1: буфер готов для вывода на терминал

    while ((len = getline(line, MAXLEN)) > 0) {
        fready = 0;
        i = 0;
        j = 0;
        while (line[i] != '\n') {
            if (!isspace(line[i]) && !isdigit(line[i])) {
                buf[j++] = line[i];
            }
            if (isspace(line[i]) && i != 0 && !isspace(line[i-1]) || line[i+1] == '\n') {
                buf[j] = '\0';
                j = 0;
                fready = 1;
            }

            if (fready) {
                if (strlen(buf) > WORDSIZE) {
                    printf("%s%s", buf, line[i+1] == '\n' ? "\n" : " ");
                }
                fready = 0;
            }
            i++;
        }
        printf("\n");
    }

    return 0;
}

// getline: считывает строку в s
int getline (char* s, int lim) {
    int c, i;

    for (i = 0; i<lim-1 && (c = getchar()) != EOF && c != '\n'; i++) {
        s[i] = c;
    }
    if (c == '\n') {
        s[i++] = c;
    }
    s[i] = '\0';

    return i;
}

Последний раз редактировалось 8Observer8; 25.12.2011 в 21:52.
8Observer8 вне форума Ответить с цитированием
Старый 25.12.2011, 22:08   #7
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Получилось отлично, спасибо =)
Axrik вне форума Ответить с цитированием
Старый 23.11.2015, 12:16   #8
farruhnet
 
Регистрация: 18.11.2012
Сообщений: 4
По умолчанию

Thanks for source

Последний раз редактировалось farruhnet; 23.11.2015 в 12:21. Причина: Changing
farruhnet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление длинных слов из строки Broken Angel Помощь студентам 3 16.01.2011 13:14
Удаление символов из строки Jasper92 Общие вопросы C/C++ 1 17.01.2010 20:41
Удаление символов из строки stscolt Помощь студентам 0 28.12.2009 12:34
Удаление слов из строки. grave123 Общие вопросы C/C++ 2 20.12.2009 15:01
Удаление слов из строки С vivo89 Помощь студентам 4 13.11.2009 22:13