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

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

15.02.2011, 21:49. Просмотров 2899. Ответов 7
Метки нет (Все метки)

Всем доброе время суток. Я програмирую на языки С++ поэтому задачка непосредственно на этом языке. Я учусь на первом курсе, поэтому еще новичек в програмировании, так что сильно не ругайте. Если будет возможность, буду очень признателен если подскажите решение или увидети в моем коде ошибку. Решать полностью необезательно, хочется самому добить. Заранее спасибо. Я выложу условие и свой код.

Задача:
Написать функцию, которая вставляет после каждого пробела запятую. Заголовок функции: 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 будет проверять строку на наличие пробелов, если таковые есть, то происходит сдвиг на элемент вправо и ставится запятая))

 Комментарий модератора 
Используйте теги форматирования кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2011, 21:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать функцию, которая вставляет после каждого пробела запятую (C++):

Написать программу, которая вставляет запятую после каждого пробела
char str1; cin.getline(str1, 250); for (int i = 0; i &lt; strlen(str1); i++){...

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

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

Написать функцию F(S,pos), которая возвращает номер первого найденного пробела
Написать и протестировать функцию F(S,pos), которая анализирует строку S,...

Вставить запятую после пробела
у меня заменяется первый символ слова а не добавляет запяую после пробела хз...

Заполнить 2 двухмерных массива символами. Написать функцию которая ставит символ пробела в старшем и младшем...(Использование директив)
Задание: Заполнить 2 двухмерных массива разной длины символами. Написать...

7
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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;
}
0
Biggins
0 / 0 / 1
Регистрация: 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++;
    }
}
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.02.2011, 15:14 #4
Цитата Сообщение от Biggins Посмотреть сообщение
Тоесть задать больше символов строке не 10 а например 255?
максимально надо размер в два раза больший. можно заранее посчитать количество пробелов и выделить необходимое количество памяти под новую строку, а затем уже произвести копирование
Цитата Сообщение от Biggins Посмотреть сообщение
если не затруднит скидывать код на С++ будет супер
в С++ такая проблема не актуальна, все решается с помощью STL класса string и метода этого класса insert.
1
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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;
}
1
volt21
0 / 0 / 0
Регистрация: 06.04.2012
Сообщений: 68
14.04.2012, 16:34 #6
А если у меня требуется вставить запятую перед пробелом - много изменять прийдётся?
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 23:12 #7
Цитата Сообщение от volt21 Посмотреть сообщение
А если у меня требуется вставить запятую перед пробелом - много изменять прийдётся?
C++
1
if (*i == ' ') i = result.insert(i, ',');
0
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++;
    }
}
0
15.04.2012, 01:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 01:42
Привет! Вот еще темы с решениями:

Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела.
Вставить после каждого символа «.» один символ « » (пробел), если после точки...

Написать функцию,которая вычисляет и печатает максимальный элемент каждого столбца матрицы
1.Которая генерирует 3 последовательности из 10 случайных чисел в диапазоне от...

Разработать рекурсивную функцию, которая после каждого вхождения символа a в строку s добавляет символ b
На уроке преподаватель не объясняет как решать. Задачи берутся из &quot;Основы...

Написать функцию, которая преобразовывает значение каждого элемента массива в куб этого значения
Код я написал, но программа работает не верно. Вот код: #include &lt;iostream&gt;...


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

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

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