Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 16.12.2012
Сообщений: 94

Удаление пробела из строки

26.03.2015, 01:26. Показов 3646. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача удалить все пробелы из строки file_name. Проблема в том, если удалять пробел, то программа уходит в бесконечный цикл, но если значению char c присвоить любое другое значение, то все норм и все удаляет как надо. Прошу помощи. В C++ новичок
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 "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>
#include <string>
#include <sys/stat.h>
#include <algorithm>
using namespace std;
int main()
{
setlocale(LC_ALL,"Russian");
char file_name[1000];
struct stat s;
int p;
    do
    {
    cout << "Имя файла: "; 
    cin >> file_name;
    char c = ' '; //удаляемый символ
    //Удаление из строки file_name всех вхождений пробела
    int i = 0;//индекс для исходной строки
    int j = i;//индекс для модифицированной строки
    //цикл модификации исходной строки
    while (file_name[i])//пока в строке не нулевой байт
    {
        //проверить текущий символ строки
        if(file_name[i] != c) //если file_name[i] не равен пробелу
        //переписать текущий символ строки по новому индексу j
        // и  увеличить индекс j единицу
            file_name[j++] =  file_name[i];
        // и увеличить индекс i на единицу
            i++;
    }
     //запись нулевого байта в конец модифицированной строки
    file_name[j] = '\0';
    ofstream FILE_SAVE;
    FILE_SAVE.open(file_name);
    int n;
    printf("Введите размер файла:");
    cin >> n;
    FILE_SAVE.seekp(n, 0);
    FILE_SAVE << '\0';
    FILE_SAVE.close();
    stat(file_name, &s);
    p=s.st_size-1;
    if (p<0)
    printf("Имя файла не должен содержать следующих знаков:   \/:*?<>| \n");
    else
    printf("Размер файла: %d\n", p);
        }
    while (p<0);
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2015, 01:26
Ответы с готовыми решениями:

Удаление строки до последнего пробела (включительно)
День добрый всем! Дана строка, содержащая слова отделенные одним или несколькими пробелами. Задача: удалить последовательно все части...

Удаление пробела из вектора
Доброго времени суток! Стоит задача: удалить все пробелы из вектора. Собственно программа не видит пробелы,вот код: #include...

Из заданной пользователем строки сформулируйте новую, добавив пробел перед каждым символом строки кроме пробела
Из заданной пользователем строки сформулируйте новую, добавив пробел перед каждым символом строки кроме пробела.Результат вывести на экран...

6
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
26.03.2015, 01:42
вот на таком примере ваш код работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//#include <stdafx.h>
#include <iostream>
 
using namespace std;   
 
int main()
{
  char c = ' ';
  char file_name[] = "12345 6 7";
  int i = 0;
  int j = 0;
  while (file_name[i])
  {
    if(file_name[i] != c)
      file_name[j++] =  file_name[i];
    i++;
  }
  file_name[j] = 0;
  std::cout << file_name << std::endl;
  return 0;
}
вот для вас будет еще крайне полезна следующая тема:
https://www.cyberforum.ru/cpp-... 62479.html
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
26.03.2015, 08:16
Цитата Сообщение от Creimi Посмотреть сообщение
Задача удалить все пробелы из строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
    std:getline (std::cin, str);
    int k;
    for (; true; k = str.find(" "))
    {
        if (k!=-1)
            str.erase(k, 1);
        else
            break;
    }
    std::cout << str << std::endl;
}
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
26.03.2015, 08:33
Для пробельного символа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <regex>
 
int main ()
{
  std::string str;
  std:getline (std::cin, str); 
  std::cout<<str<<std::endl;
  str=std::regex_replace (str,std::regex(" "),"");
  std::cout<<str<<std::endl;
  return 0;
}
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
26.03.2015, 09:36
Аналогично:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
int main () {
  std::string str;
  std::copy(std::istream_iterator<char>(std::cin), std::istream_iterator<char>(), back_inserter(str));
  std::cout<<str<<std::endl;
  return 0;
}
0
1 / 1 / 0
Регистрация: 16.12.2012
Сообщений: 94
26.03.2015, 10:07  [ТС]
Кто подскажет почему моя прога уходит в бесконечный цикл? Я с этим разобраться не могу. Задача создать файл с определенным именем( имя файла не должен содержать спец. символы), задать размер файла в байтах и считать получивший размер файла
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.03.2015, 12:42
Цитата Сообщение от Ilot Посмотреть сообщение
Аналогично:
Аналогично:
C++
1
2
3
4
5
6
7
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    std::cout << std::string((std::istream_iterator<char>(std::cin)), std::istream_iterator<char>());
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2015, 12:42
Помогаю со студенческими работами здесь

Считывание строки до пробела
Доброго времени суток. Как считать строку до пробела (не до символа перехода на новую строку) и записать ее в символьный массив?

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

Удаление символа из строки после пробела
Здравствуйте, проблемы с решением такого задания : Дана строка символов, состоящая из произвольного текста на английском языке, слова...

Удаление до пробела из строки и вывод в checkedListBox
Есть &quot;программа&quot; которая по кнопке загружает из файла .csv данные и выводит в checkedListBox. Но проблема в том, что данные там в формате...

Удаление пробела(ов)
когда начинают вносить данные (ФИО) часто вносят и с маленькой буквы, и пробелы поставят &quot; чванова&quot;, &quot; кРотова &quot; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru