0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
1

Удалить из строки все лишние пробелы: в начале, в конце, повторяющиеся

12.05.2011, 17:18. Показов 39726. Ответов 17
Метки нет (Все метки)

Дана строка предложение. Удалить из строки все лишние пробелы: в начале, в конце, повторяющиеся.

Не могу понять, как удалить все пробелы в начале и в конце.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include  <stdio.h>
#include <locale.h>
 
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
char str[101];
printf ("Введите строку:");
gets(str);
  int j=1;
  for (int i=1; str[i]!=0; i++) {
     if((str[i] == ' ') && (str[i-1]==' ')) continue;
     str[j++] = str[i];
} 
    if (str[j-1]==' ') j--;
  str[j] = 0;
  printf("Результат:");  puts(str);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2011, 17:18
Ответы с готовыми решениями:

Удалить повторяющиеся пробелы, также пробелы в начале и в конце строки (ассемблерная вставка)
Написать ассемблерную вставку, реализующую следующую обработку строки: согласно варианту. Оформить...

Удалить все пробелы в начале и в конце строки
Дана символьная строка.Удалить все пробелы в начале и в конце строки. Помогите решить пожалуйста.

Удалить пробелы в начале и в конце строки
Задали в универе программу именно на FASM, помогите кто сможет. Задана строка, удалить из неё...

Удалить пробелы в начале и конце строки
Удалить группу пробелов, с которых, возможно начинается и заканчивается строка строки читаются из...

17
239 / 212 / 84
Регистрация: 18.03.2010
Сообщений: 750
12.05.2011, 17:35 2
создавай второй массив и копируй в него первый пропуская пробелы.
1
151 / 149 / 44
Регистрация: 09.02.2010
Сообщений: 407
12.05.2011, 18:00 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include  <stdio.h>
#include <locale.h>
#include <string.h>
 
int main(int argc, char *argv[]) {
    //setlocale(LC_ALL,"");
    char str[101];
    char res[101];
    printf("Введите строку:");
    fgets (str, 101, stdin);
    int j = 0;
    int i;
    for (i = 0; i<strlen(str) ; i++) {
        if (str[i] == ' ')
            continue;
        res[j] = str[i];
        j++;
    }
    printf("\nРезультат:%s", res);
    getchar();
}
1
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
12.05.2011, 18:15  [ТС] 4
Вот только нужно удалить лишние пробелы... Если между словами 5 пробелов, то оставить только один.
0
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
13.05.2011, 10:41  [ТС] 5
Как удалить последний пробел? С остальными программа работает нормально.
Дело в том, что если в конце строки стоит много пробелов, то программа удаляет все, кроме одного.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include  <stdio.h>
#include <locale.h>
#include <string.h>
 
int main(int argc, char *argv[]) {
    setlocale(LC_ALL,"");
    char str[101];
    char res[101];
    printf("Введите строку:");
    fgets (str, 101, stdin);
    int j = 0;
    int i;
    for (i = 0; i<strlen(str) ; i++) {
        if (str[i] == ' ') {
      if (j==0) continue;
      if (str[i+1] == ' ') continue;}
        res[j] = str[i];
        j++;
    }
    printf("\nРезультат:%s", res);
    getchar();
}
0
239 / 212 / 84
Регистрация: 18.03.2010
Сообщений: 750
13.05.2011, 13:58 6
Лучший ответ Сообщение было отмечено как решение

Решение

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  <stdio.h>
#include <locale.h>
#include <string.h>
 
int main(int argc, char *argv[]) {
    setlocale(LC_ALL,"");
    char str[101] = "";
    char res[101] = "";
    
    printf("Введите строку:");
    fgets (str, 101, stdin);
    
    
    int j = 0;
    int i;
    for (i = 0; i<strlen(str) ; i++) {
        if (str[i] == ' ') 
        {
          if (j==0) continue;
          if (str[i+1] == ' ') continue;
        }
        res[j] = str[i];
        j++;
    }
    i=strlen(res);
    if(res[i-2] == ' ')
        res[i-2] = '\0';
 
    printf("\nРезультат:%s", res);
    getchar();
}
5
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
13.05.2011, 16:31  [ТС] 7
Огромное спасибо!!!
Делала так же, только писала res[i-1]... А почему нужно именно 2 отнимать? Последний символ завершающий ноль, вот я его и отнимала...
0
151 / 149 / 44
Регистрация: 09.02.2010
Сообщений: 407
14.05.2011, 15:16 8
А почему нужно именно 2 отнимать? Последний символ завершающий ноль
Lenoriya, последний символ который считает strlen - это '\n'. Читаем Керниган, Ритчи - Язык программрования Си. 2 издание. стр. 43. Соответственно - res[i-2] - это последний пробел в строке.
1
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
14.05.2011, 15:58  [ТС] 9
dampir_sanek, спасибо, книжечку скачаю
0
Эксперт С++
5036 / 2615 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
14.05.2011, 16:06 10
Цитата Сообщение от dampir_sanek Посмотреть сообщение
последний символ который считает strlen - это '\n'
как же это у меня получилось?
C
1
2
3
4
5
6
7
8
9
10
fasked@linux-6bdj:~/Documents> cat space.c
#include <stdio.h>
#include <string.h>
 
int main() {
        const char *str = "0123456789\n0123456789";
        printf("%d\n", strlen(str));
}
fasked@linux-6bdj:~/Documents> ./space
21
0
151 / 149 / 44
Регистрация: 09.02.2010
Сообщений: 407
14.05.2011, 16:31 11
fasked, нет нет, не в этом смысле. Я имелл ввиду ссылаясь на страницу 43 из Ритчи для строки:
s = "abcd\n" размещенной в памяти как "abcd\n\0" strlen(s) выдаст 5, а не 6. То есть

Цитата Сообщение от Lenoriya Посмотреть сообщение
Последний символ завершающий ноль, вот я его и отнимала...
этот символ - завершающий '\0' - strlen() не учтет. Следовательно и отнимать его не надо.
Далее - fgets считывает из stdin строку в формате "abcd \n" - соответвенно для того, чтобы удалить последний пробел нужно:
C
1
2
3
...
fgets(str, 100, stdin);
str[strlen(str) - 2] = '\0';
и я не говорю ни коем случае, что
C
1
2
str = "\n\n\n\n";
printf("%d", strlen(str));
даст длину 1. Конечно же 4.
1
0 / 0 / 1
Регистрация: 05.11.2015
Сообщений: 9
09.11.2015, 15:43 12
Как модифицировать программу, что бы она удаляла только начальные и последние пробелы?
0
2 / 2 / 2
Регистрация: 12.03.2015
Сообщений: 51
26.06.2016, 11:32 13
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  <stdio.h>
#include <locale.h>
#include <string.h>
 
int main(int argc, char *argv[]) {
    setlocale(LC_ALL,"");
    char str[101] = "";
    char res[101] = "";
    
    printf("Введите строку:");
    fgets (str, 101, stdin);
    
    
    int j = 0;
    int i;
    for (i = 0; i<strlen(str) ; i++) {
        if (str[i] == ' ') 
        {
          if (j==0) continue;
          if (str[i+1] == ' ') continue;
        }
        res[j] = str[i];
        j++;
    }
    i=strlen(res);
    if(res[i-2] == ' ')
        res[i-2] = '\0';
 
    printf("\nРезультат:%s", res);
    getchar();
}
а код можете написать без оператора continue, пожалуйста, заранее спасибо?
0
1112 / 794 / 247
Регистрация: 30.06.2015
Сообщений: 4,189
Записей в блоге: 44
26.06.2016, 18:31 14
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
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#define N 256
/*--------------------------*/
char * udal_nach(char *a)
{
   char *b=a;
   while(*b++==' ');
   if(a!=--b)
   {
      --b;
     *b++='\0';
      return strcpy(a, b);
   }
    return a;
}
/*--------------------------*/
char *udal_kon(char *a)
{
  char *b=a;
  b=--b+strlen(a);
  while(*b--==' ');
  b+=2;
  *b='\0';
  return a; 
} 
/*--------------------------*/
char *udal_lishn(char *a)
{
  char *b, *t;
  b = a;
  while(*b)
  {
      while(*b!=' ' && *b)++b;
      if(*b==' '&& *(b+1)==' ')
      {
        t=b+1;
        while(*b==' '&& *b)++b;
        *t='\0';
        strcat(a, b);
        b=t;
      }else ++b;
        
  }
return a;  
}   
int main(void)
{
  setlocale(LC_ALL,"RU");
  char a[N]="   Lorem ipsum     dolor sit amet,    consectetur adipiscing elit   ";
  printf("%s\n",  udal_nach(a) );
  printf("%s\n",  udal_kon(a) );
  printf("%s\n",  udal_lishn(a) );
return (0);
}
0
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 2
23.03.2017, 17:38 15
как изменить код, чтобы все это он делал из файла?
0
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 37
08.02.2019, 16:56 16
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main() {
    char s[100]; int i = 0;
    gets(s);
    while (s[i] != '\0') {
        if (s[i] != ' ' || (s[i] == ' ' && i != 0 && i != strlen(s) && s[i+1] != ' ')) {
            printf("%c", s[i]);
        }
        i++;
    }
}
0
296 / 227 / 102
Регистрация: 11.08.2016
Сообщений: 776
08.02.2019, 17:48 17
napkep, проще всего будет считывать построчно файл и работать с данным кодом без изменений. Начать следует с того, что зациклить код в main и каждую итерацию , вначале считывать строку, а затем идёт код без изменений.
0
0 / 0 / 0
Регистрация: 07.02.2019
Сообщений: 55
11.06.2019, 14:01 18
Цитата Сообщение от jonson Посмотреть сообщение
char str[101] = "";
char res[101] = "";
printf("Введите строку:");
fgets (str, 101, stdin);
Скажи как можно вместо строки, взять текстовый файл?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2019, 14:01
Помогаю со студенческими работами здесь

Как удалить пробелы и знаки табуляции в начале и конце строки?
Как удалить пробелы и знаки табуляции в начале и конце строки? Я написал код но не понимаю в чем...

Как убрать все пробелы в начале и конце строки ?
У меня есть файл там хранится такая матрица ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

Строка: Преобразовать строку к верхнему регистру и удалить пробелы в начале и конце строки
Вводится строка из трёх слов , разделённых пробелами, составить программу , преобразующую строку к...

Во введенной пользователем строке удалите все пробелы в начале и конце строки
Во введенной пользователем строке удалите все пробелы в начале и конце строки. Вывод на экран...

Во введенной пользователем строке удалите все пробелы в начале и конце строки
Во введенной пользователем строке удалите все пробелы в начале и конце строки. Я ищу первый индекс...

Привести строку к нормированному виду, те удалить все пробелы в начале и конце, а между словами оставить один пробел
Буду благодарен если поможете с задачей. Просто строки не понимаю. Вводится ненормированная...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru