Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
Qitelery
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 40
1

Удаление из строки символа

28.09.2017, 16:57. Просмотров 452. Ответов 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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
char* remove_bang()
{
    int len, i, j;
    char* s;
    s = "hi!!!";
    len = strlen(s);
    for (i = 0; i < len; i++)
    {
        if (i != len - 1 && s[i] == '!')
        {
            for (j = i; j < len - 1; j++)
            {
                s[j] = s[j + 1];
            }
        }
    }
    if (s[len - 1] != '!')
    {
        s[len] = '!';
    }
    return s;
}
В общем компилятор ругается, а я не пойму с чего. Подозреваю, что с синтаксисом проблемы, но никак не увижу где. Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2017, 16:57
Ответы с готовыми решениями:

Удаление символа из строки
Задача такова: Даны символы s1,s2,... Известно, что символ s1 отличен от...

Функция: удаление из строки символа с заданным номером
Написать функцию, которая удаляет из строки символ с заданным номером

Поиск в строке символа и удаление его из другой строки
Добрый день! Прошу помощи с заданием по Си. Даны строки A и B. Если все...

Удаление от символа до символа с заданной позиции
Здравствуйте, подскажите как удалить из файла строку от символа до символа с...

Удаление символа по нажатию клавиши backspace
в общем у меня есть код #include &lt;malloc.h&gt; #include &lt;stdio.h&gt; #include...

6
no_way
Заблокирован
28.09.2017, 17:03 2
С какой функции программа начинает работу?
Цитата Сообщение от Qitelery Посмотреть сообщение
s = "hi!!!";
Это строка только для чтения. Ее нельзя менять, программа упадет.
0
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
28.09.2017, 18:47 3
вместо
C
1
2
3
    
char* s;
s = "hi!!!";
напишите
C
1
char s[] = "hi!!!";
0
Геомеханик
798 / 602 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
29.09.2017, 07:20 4
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>
 
char* remove_ch(char* s, char ch){
    char* p, *t = s;
    while(*s && (*s != ch))
        ++s;
 
    for(p = s; *s; *s = *++p){
        if((*p == ch) && (*(p + 1) == ch))
            continue;
        ++s;
    }
    return t;
}
 
int main(void){
    char s[] = "Hi!!! Stop!! end!!!! eof!";
    puts( remove_ch(s, '!') );
    getchar();
    return 0;
}
0
Qitelery
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 40
06.10.2017, 17:17  [ТС] 5
LFC, спасибо, исправил, но все равно ругается. Теперь не нравится в конце
C
1
return s;
поменял на
C
1
2
3
  for (i = 0; i < strlen(s); i++){
        printf("%c", s[i]);
    }
но все равно не хочет, говорит что я не прав, а где не понятно, сообщает следующее:

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot open output file untitled4.exe: Permission denied
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [untitled4.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/untitled4.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/untitled4.dir/rule] Error 2
CMakeFiles\untitled4.dir\build.make:95: recipe for target 'untitled4.exe' failed
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/untitled4.dir/all' failed
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/untitled4.dir/rule' failed
Makefile:117: recipe for target 'untitled4' failed
mingw32-make.exe: *** [untitled4] Error 2

Геомеханик, спасибо, ваш код работает. Только два момента. Первое, то что программа должна удалить все восклицательные знаки из предложения, кроме последнего, т.е. вывести должно "Hi Stop end eof!". И ещё я не понял зачем после puts getchar. Вроде puts выводит, а getchar считывает...
0
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
07.10.2017, 15:06 6
Цитата Сообщение от Qitelery Посмотреть сообщение
Теперь не нравится в конце return s;
потому что ваша функция возвращает адрес локальной переменной s,а она видна только внутри функции
0
Qitelery
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 40
18.10.2017, 20:40  [ТС] 7
LFC, а если так
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
char* remove_bang(char* s)
{
    int len, i, j;
    len = strlen(s);
    for (i = 0; i < len; i++)
    {
      if (i != len - 1 && s[i] == '!')
      {
        for (j = i; j < len - 1; j++) 
        {
          s[j] = s[j + 1];
        }
      }
    }
    if (s[len - 1] != '!')
    {
      s[len] = '!';
    }
    return s;
}
0
18.10.2017, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2017, 20:40

В строку X скопировать 4 символа из строки S, начиная с середины строки
У меня есть две строки например: char S=нераовлвгера; char X; как в строку X...

Сравнение символа и строки
#include &lt;stdio.h&gt; # include &lt;string.h&gt; # include &lt;stdlib.h&gt; # include...

Копирование строки, начиная с i-го символа
В Паскале есть процедура insert(s,s2,i), которая копирует строку s в строку s2...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru