Форум программистов, компьютерный форум CyberForum.ru

Написать функцию, которая вставляет после каждого пробела запятую - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Biggins
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 18
15.02.2011, 21:49     Написать функцию, которая вставляет после каждого пробела запятую #1
Всем доброе время суток. Я програмирую на языки С++ поэтому задачка непосредственно на этом языке. Я учусь на первом курсе, поэтому еще новичек в програмировании, так что сильно не ругайте. Если будет возможность, буду очень признателен если подскажите решение или увидети в моем коде ошибку. Решать полностью необезательно, хочется самому добить. Заранее спасибо. Я выложу условие и свой код.

Задача:
Написать функцию, которая вставляет после каждого пробела запятую. Заголовок функции: void insertComma(char *s); Написать программу, которая принимает от пользователя набор строк (массив строк), вставляет после каждого пробела запятую, выводит преобразованные строки на экран.


Код:
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
# include<iostream>
# include<conio.h>
using namespace std;
void insertComma(char *);
int main(){
    char str [10];
    cin.getline(str,10);
    insertComma(str);
    cout<<(str)<<endl;
    getch();
    return 0;
}
 
    void insertComma(char *s)
    {
        int i=0;
        int j=0;
        char a=',';
        while (s[j]!='\0'){
            if (s[j]==' ')
            s[j-1]=s[j];
        j++;
        }
 
        while (s[i]!='\0')
            if(s[i]==' ')
                i=a;
            else i++;
 
    }
P.S Я рассуждал так, что цыкл while будет проверять строку на наличие пробелов, если таковые есть, то происходит сдвиг на элемент вправо и ставится запятая))

 Комментарий модератора 
Используйте теги форматирования кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2011, 21:49     Написать функцию, которая вставляет после каждого пробела запятую
Посмотрите здесь:

C++ Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела.
Разработать рекурсивную функцию, которая после каждого вхождения символа a в строку s добавляет символ b C++
Заполнить 2 двухмерных массива символами. Написать функцию которая ставит символ пробела в старшем и младшем...(Использование директив) C++
C++ Написать функцию F(S,pos), которая возвращает номер первого найденного пробела
Написать функцию,которая вычисляет и печатает максимальный элемент каждого столбца матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.02.2011, 22:14     Написать функцию, которая вставляет после каждого пробела запятую #2
Что если размер передаваемой строки не достаточно велик для размещения там получившейся строки?
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
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
 
void InsertComma(char *string) {
  int string_length = strlen(string);
  char *buffer = (char*)malloc(string_length + 1);
  char *source_symbol = string;
  char *destination_symbol = buffer;
  do {
    *destination_symbol++  = *source_symbol;
    if (*source_symbol == ' ') *destination_symbol++ = ',';
  } while (*source_symbol++ != '\0');
  strcpy(string, buffer);
  free(buffer);
}
 
int main(int argc, char *argv[]) {
  size_t buffer_size = 65535;
  char *buffer = (char*)malloc(buffer_size);
 
  while (!feof(stdin)) {
    if (fgets(buffer, buffer_size, stdin)) {
      size_t buffer_length = strlen(buffer);
      if (buffer_length > 0) buffer[buffer_length - 1] = '\0';
      InsertComma(buffer);
      printf("%s\n", buffer);
    }
  }
 
  free(buffer);
  return 0;
}
Biggins
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 18
16.02.2011, 19:14  [ТС]     Написать функцию, которая вставляет после каждого пробела запятую #3
Тоесть задать больше символов строке не 10 а например 255? я пробывал всеравно не пашет.. Я так понял вы выложели код на, большое спасибо за отзывчивость. Правда я не силен в С, знаю языки с и с++ почти одинаковы, если не затруднит скидывать код на С++ будет супер))

Добавлено через 20 часов 39 минут
Проблема решена!
Вот код, если у кого-нибудь будет похожая задача)))


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
# include <iostream>
# include <conio.h>
using namespace std;
 void insertComma(char *);
 int main(){
     cout<<"Please enter your string: "<<endl;
     char Arr[2][255];
     for (int i=0; i<2;i++){
         cin.getline(Arr[i],255);
         insertComma(Arr[i]);
         
     }
     for (int i=0; i<2;i++)
    
     cout<<"Result is: "<<Arr[i]<<endl;
     getch();
     return 0;
 
 
    
 }
void insertComma(char *s)
{
    
    int j=0;
    while(s[j]!='\0') {
        if(s[j]==' ')
        {
            for(int i = strlen(s); i > j; i--)
                s[i+1] = s[i];
            s[j+1]=',';
    
        }
        j++;
    }
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.02.2011, 15:14     Написать функцию, которая вставляет после каждого пробела запятую #4
Цитата Сообщение от Biggins Посмотреть сообщение
Тоесть задать больше символов строке не 10 а например 255?
максимально надо размер в два раза больший. можно заранее посчитать количество пробелов и выделить необходимое количество памяти под новую строку, а затем уже произвести копирование
Цитата Сообщение от Biggins Посмотреть сообщение
если не затруднит скидывать код на С++ будет супер
в С++ такая проблема не актуальна, все решается с помощью STL класса string и метода этого класса insert.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
17.02.2011, 21:08     Написать функцию, которая вставляет после каждого пробела запятую #5
Цитата Сообщение от Biggins Посмотреть сообщение
Правда я не силен в С, знаю языки с и с++ почти одинаковы, если не затруднит скидывать код на С++ будет супер))
Цитата Сообщение от fasked Посмотреть сообщение
в С++ такая проблема не актуальна, все решается с помощью STL класса string и метода этого класса insert
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <iostream>
 
std::string InsertComma(const std::string &source) {
  std::string result(source);
  for (std::string::iterator i = result.begin(); i != result.end(); ++i)
    if (*i == ' ') i = result.insert(++i, ',');
  return result;
}
 
int main(int argc, char *argv[]) {
  std::cout << InsertComma(std::string("a b c")) << std::endl;
  return 0;
}
volt21
0 / 0 / 0
Регистрация: 06.04.2012
Сообщений: 68
14.04.2012, 16:34     Написать функцию, которая вставляет после каждого пробела запятую #6
А если у меня требуется вставить запятую перед пробелом - много изменять прийдётся?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 23:12     Написать функцию, которая вставляет после каждого пробела запятую #7
Цитата Сообщение от volt21 Посмотреть сообщение
А если у меня требуется вставить запятую перед пробелом - много изменять прийдётся?
C++
1
if (*i == ' ') i = result.insert(i, ',');
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 01:42     Написать функцию, которая вставляет после каждого пробела запятую
Еще ссылки по теме:

C++ Строки С++. В строке после каждого слова вставить запятую
Написать функцию, которая преобразовывает значение каждого элемента массива в куб этого значения C++
Дан массив строк. Написать функцию, которая после каждого знака пунктуации будет ставить пробел C++

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

Или воспользуйтесь поиском по форуму:
volt21
0 / 0 / 0
Регистрация: 06.04.2012
Сообщений: 68
15.04.2012, 01:42     Написать функцию, которая вставляет после каждого пробела запятую #8
Цитата Сообщение от panicwassano Посмотреть сообщение
C++
1
if (*i == ' ') i = result.insert(i, ',');
Спасиб, конечно, братиш, но я имел ввиду эту:
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
# include <iostream>
# include <conio.h>
using namespace std;
 void insertComma(char *);
 int main(){
     cout<<"Please enter your string: "<<endl;
     char Arr[2][255];
     for (int i=0; i<2;i++){
         cin.getline(Arr[i],255);
         insertComma(Arr[i]);
         
     }
     for (int i=0; i<2;i++)
    
     cout<<"Result is: "<<Arr[i]<<endl;
     getch();
     return 0;
 
 
    
 }
void insertComma(char *s)
{
    
    int j=0;
    while(s[j]!='\0') {
        if(s[j]==' ')
        {
            for(int i = strlen(s); i > j; i--)
                s[i+1] = s[i];
            s[j+1]=',';
    
        }
        j++;
    }
}
Yandex
Объявления
15.04.2012, 01:42     Написать функцию, которая вставляет после каждого пробела запятую
Ответ Создать тему
Опции темы

Текущее время: 23:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru