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

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

26.03.2015, 01:26. Просмотров 1321. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2015, 01:26
Ответы с готовыми решениями:

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

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

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

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

6
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
26.03.2015, 01:42 2
вот на таком примере ваш код работает:
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
834 / 492 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
26.03.2015, 08:16 3
Цитата Сообщение от 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
2368 / 1779 / 387
Регистрация: 15.12.2013
Сообщений: 7,531
26.03.2015, 08:33 4
Для пробельного символа:

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
Эксперт С++
1883 / 1231 / 354
Регистрация: 16.05.2013
Сообщений: 3,231
Записей в блоге: 6
26.03.2015, 09:36 5
Аналогично:
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  [ТС] 6
Кто подскажет почему моя прога уходит в бесконечный цикл? Я с этим разобраться не могу. Задача создать файл с определенным именем( имя файла не должен содержать спец. символы), задать размер файла в байтах и считать получивший размер файла
0
Форумчанин
Эксперт CЭксперт С++
8159 / 5007 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
26.03.2015, 12:42 7
Цитата Сообщение от 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2015, 12:42

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

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

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

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

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


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

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

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