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

С++ для начинающих

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

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

15.02.2011, 21:49. Просмотров 2375. Ответов 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++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lemegeton
2924 / 1353 / 135
Регистрация: 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 / 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++;
    }
}
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.02.2011, 15:14 #4
Цитата Сообщение от Biggins Посмотреть сообщение
Тоесть задать больше символов строке не 10 а например 255?
максимально надо размер в два раза больший. можно заранее посчитать количество пробелов и выделить необходимое количество памяти под новую строку, а затем уже произвести копирование
Цитата Сообщение от Biggins Посмотреть сообщение
если не затруднит скидывать код на С++ будет супер
в С++ такая проблема не актуальна, все решается с помощью STL класса string и метода этого класса insert.
1
lemegeton
2924 / 1353 / 135
Регистрация: 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
592 / 560 / 20
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 01:42
Привет! Вот еще темы с ответами:

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

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

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

После каждого слова в строке вставить запятую - C++
Вводится строка. После каждого слова в строке вставить запятую, а в конце предложения стоит точка.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.04.2012, 01:42
Ответ Создать тему
Опции темы

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