0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
1

Записать в начало строки сумму цифр длины этой строки

22.11.2017, 17:59. Показов 892. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер . Есть задание :

Ввести строку из цифр и если ее длина > 10, то записать в начало строки сумму ее цифр.

начала делать но проблема с выводом строки из цифр . как правильно оформить условие для вывода ?
вот что есть у меня на данный момент .
заранее Спасибо
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
char *stroka, *stroka_resultat;
int let = 0;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
 
    
     stroka=new char[225];   // память
    stroka_resultat=new char[225];  // -//-
 
    fflush(stdin);
 
    link:
 
    printf("Введите строку , состоящую из цифр \n \n ");
    scanf_s("%c \n", stroka);
 
    /*УСЛОВИЯ , ДЛЯ ВВОДА СТРОКИ */
 
    for (int i = 0; i < strlen(stroka); i++) {
        if (isalpha(*(stroka + i)))
            let++;
        else (let >= 0);
            puts("В строке есть буквы , а должны быть только цифры!!!");
        goto link;
    }
 
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2017, 17:59
Ответы с готовыми решениями:

Ошибки (в файле содержатся строки разной длины - записать их в выходной файл в порядке возрастания длины строки)
#include &lt;iostream&gt; #include &lt;set&gt; #include &lt;iterator&gt; #include &lt;fstream&gt; #include &lt;string&gt;...

Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки
Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке...

Текстовый файл содержит строки – предложения разной длины. Записать их в выходной файл в порядке возрастания длины строки
ребят всю голову сломал уже завтра уже надо сдавать(( Текстовый файл содержит строки –...

Упорядочить строки матрицы по неубыванию сумм цифр элементов этой строки
Пусть дана матрица А(п х т). Упорядочьте строки по неубыванию сумм цифр элементов этой строки....

17
16 / 28 / 5
Регистрация: 10.11.2017
Сообщений: 90
22.11.2017, 18:01 2
Цитата Сообщение от ALEXANDRA1995 Посмотреть сообщение
scanf_s("%c \n", stroka);
Почему для строка спецификатор формата %c?
0
Заклинатель змей
700 / 555 / 219
Регистрация: 30.04.2016
Сообщений: 2,591
22.11.2017, 18:02 3
ALEXANDRA1995, в C++ лучше использовать string вместо char*
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
22.11.2017, 18:16  [ТС] 4
всегда им пользовалась для вывода строки)
0
16 / 28 / 5
Регистрация: 10.11.2017
Сообщений: 90
22.11.2017, 18:32 5
Цитата Сообщение от ALEXANDRA1995 Посмотреть сообщение
всегда им пользовалась для вывода строки)
Строку он тоже не выводит. Посмотри документацию.
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
22.11.2017, 18:48  [ТС] 6
хорошо , спасибо
так а насчёт задания , не знаете как исправить и решить задачу ?
0
16 / 28 / 5
Регистрация: 10.11.2017
Сообщений: 90
22.11.2017, 19:11 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <numeric>
using namespace std;
 
int main(int argc, char *argv[]) {
    string line;
    getline(cin, line);
    if (line.length() > 10)
        cout<<accumulate(cbegin(line), cend(line), 0, [](const int &a, const char &b) {return a + b-'0';});
    cout<<line<<endl;
}
Пример работы:
Код
$ ./blablabla 
12345
12345
$ ./blablabla 
55551111111111
3055551111111111
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
22.11.2017, 21:35  [ТС] 8
не могли бы вы помочь? Строку ввожу и даже если есть буквы их отбрасывает и остаётся строка только из цифр . как мне теперь суммировать их если количество >10 и вписать сумму перед строкой ? снизу код который есть на данный момент .

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
#include <iostream>
#include "ctype.h"
#include <conio.h>
#include <cstring>
#include <string>
 
/*Ввести строку из цифр и если ее длина > 10, то записать в начало строки сумму ее цифр.*/
 
using namespace std;
 
 
void PrintDigits( char *x) // функция которая из массива выводит только цифры 
{
    for (int i = 0; x[i]; i++)
        
        if (isdigit(x[i]))
            
            cout << x[i];
                
                cout << endl;
}
 
 
int main()
{
 
      setlocale(LC_CTYPE, "Russian");
 
       char  stroka [200], *str = stroka;
      
 
    // char stroka = new char [200]; // Выделение памяти 
 
    cout << "Введите строку: \n";
    
    cin >> str;
    
    cout << "Преобразованная строка, где остались только цифры: \n";
    
    PrintDigits(stroka); // вызов функции Для преобразования строки
    
 
    system("PAUSE");
 
 
    return 0;
}
0
818 / 621 / 321
Регистрация: 24.02.2017
Сообщений: 2,199
22.11.2017, 22:43 9
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
#include <iostream>
#include <sstream>
#include <string>
 
using namespace std;
 
int main()
{
  stringstream ss;
  string s;
 
  getline(cin, s);
  int  i=s.length(),sum=0;
  if(i>10)
  while(--i>=0)
   sum+=s[i]-'0';
   ss<<sum;
   ss<<s;
   s=ss.str();
   cout<<s;
 
  system("pause>0");
  return 0;
 }
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
23.11.2017, 00:29  [ТС] 10
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
#include <iostream>
#include "ctype.h"
#include <conio.h>
#include <cstring>
#include <string>
 
/*Ввести строку из цифр и если ее длина > 10, то записать в начало строки сумму ее цифр.*/
 
using namespace std;
char  stroka[200], *str = stroka;
 
void PrintDigits(char *x) // функция которая из массива выводит только цифры 
{
 
    cout << "Преобразованная строка, где остались только цифры: \n";
 
    for (int i = 0; x[i]; i++) {
 
        if (isdigit(x[i]))
 
            cout << x[i];
 
    }
 
    cout << endl;
 
 
}
 
 
int main()
{
 
    setlocale(LC_CTYPE, "Russian");
 
 
 
 
    // char stroka = new char [200]; // Выделение памяти 
 
    cout << "Введите строку: \n";
 
    cin >> str;
 
 
    PrintDigits(stroka); // вызов функции Для преобразования строки
 
 
 
    system("PAUSE");
 
 
    return 0;
}
Добавлено через 24 минуты
помогите пожалуйста оформить условие (если чисел больше 10 то сумму в начало строки занести) в виде пользовательской функции .. То что вы написали работает ,но как к себе в код это занести и оформить функцию .. не получается


Добавлено через 55 минут
Помогите пожалуйста найти ошибку в функции . и довести её до ума . что не пишу - выдаёт 0 и всё . также если чисел меньше 10 не выбивает этого . помогите пожалуйста
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include "ctype.h"
#include <conio.h>
#include <cstring>
#include <string>
#include <sstream>
 
 
/*Ввести строку из цифр и если ее длина > 10, то записать в начало строки сумму ее цифр.*/
 
using namespace std;
char  stroka[200], *str = stroka;
 
void PrintDigits(char *x) // функция которая из массива выводит только цифры 
{
    
    stringstream ss;
        std::string s;
    int  i = s.length(), *ptri =new int [i];
    int sum = 0;
    
 
                   cout << "Преобразованная строка, где остались только цифры:\n \n";
 
    for (int i = 0; x[i]; i++){
 
        if (isdigit(x[i]))
 
            cout << x[i];
    
}
    
    cout << endl;
 
    cout << "Если цифр > 10 , преобразуем строку далее :\n \n";
    cout << "Преобразованная строка:\n \n";
 
    if  (x[i] > 10) 
    {
        while (--i >= 0)
            sum = sum + *ptri - '0';
    ss << sum;
    ss << s;
    s = ss.str();
    cout << s;
 
 
    cout << sum << endl;
    }
    
    else if
        (x[i] < 10) {
        cout << " цифр < 10 , строка не требует преобразования , согласно заданию! :\n \n";
    }
              
}
 
 
int main()
 {
 
      setlocale(LC_CTYPE, "Russian");
 
      
      
 
    // char stroka = new char [200]; // Выделение памяти 
 
    cout << "Введите строку:\n \n";
    
    cin >> str;
    
    
    PrintDigits(stroka); // вызов функции Для преобразования строки
    
 
    system("PAUSE");
 
 
    return 0;
}
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
23.11.2017, 11:20 11
ALEXANDRA1995, здравствуйте! Вот еще вариант:

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
#include <bits/stdc++.h>
 
const int N = 10;
 
using namespace std;
 
string dSum(const string& s)
{
    int sum = 0;
    for (int i = 0; i < s.size(); i++)
    {
        sum += s[i] - '0';
    }
    stringstream convert;
    convert << sum;
    return convert.str();
}
 
int main()
{
    string str;
    cout << "Enter a string with some digits:" << "\n";
    getline(cin, str);
    cout << "Target info:" << "\n";
    if (str.size() > N)
        cout << dSum(str) + str << "\n";
    else
        cout << str << "\n";
    cin.get();
    return 0;
}
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
23.11.2017, 11:51  [ТС] 12
большое спасибо за ответ ))
не могли бы вы пояснить как работает функция ?
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
23.11.2017, 12:46 13
ALEXANDRA1995, да. Вот код с комментариями:

C++
1
2
3
4
5
6
7
8
9
10
11
string dSum(const string& s) //Объявляем функцию типа string и передаем ей строку
{
    int sum = 0; //Задаем начальное значение суммы равное 0
    for (int i = 0; i < s.size(); i++) //Пробегаем по строке
    {
        sum += s[i] - '0'; //Переводим цифры из типа char в тип integer и накапливаем в сумме
    }
    stringstream convert;
    convert << sum;
    return convert.str(); //Переводим числовое значение суммы в строку и возвращаем данное значение
}
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
23.11.2017, 22:20  [ТС] 14
Помогите подкорректировать код . работает не совсем корректно . буквы выбрасывает а дальше производит расчёт по первоначальной строке .
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include "ctype.h"
#include <conio.h>
#include <cstring>
#include <string>
#include <sstream>
#include <string>
 
const int N = 10;
 
using namespace std;
 
string dSum(const string& s)
{
    
    int sum = 0;
    
    for (int i = 0; i < s.size(); i++)
    
    {
        
        sum += s[i] - '0';
    
    }
    
    stringstream convert;
    
    convert << sum;
    
    return convert.str();
}
 
int main()
{
    setlocale(LC_CTYPE, "ru");
 
    char stroka [255]; 
 
    string str;
 
    cout << "Введите строку, состоящую из цифр:" << "\n";
 
    getline(cin, str);
 
    cout << "Преобразованная строка, где остались только цифры: \n";
 
    for (int i = 0; str[i]; i++) {
 
        if (isdigit(str[i]))
 
            cout << str[i] ;
    }
          
 
          cout << endl << endl;
 
 
    cout << "Преобразованная строка:" << "\t";
 
    if (str.size() > N)
        
        cout << dSum(str) <<' '<<  str  << "\n";
 
    else
 
        cout << "чисел меньше 10"  << "\n";
 
    cin.get();
 
    return 0;
 
}
Миниатюры
Записать в начало строки сумму цифр длины этой строки  
0
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
23.11.2017, 22:30 15
ALEXANDRA1995, тут можно в сотни раз проще. Зачем изобретать какой-то велосипед?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main()
{
    std::string line;
    std::cin >> line;
    line = std::to_string(line.size()) + line;
 
    std::cout << line << std::endl;
 
    std::cin.ignore();
    std::cin.get();
}
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
23.11.2017, 22:35  [ТС] 16
Если ввожу только цифры , то всё ок , а если вперемешку с буквами , то ерунда какая то (
0
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
23.11.2017, 22:35 17
Да вам даже string использовать можно. Зачем тогда ещё что-то придумывать то? У вас есть класс string. У него есть набор методов. Мы же будем использовать лишь часть функционала, а часть заменять какими-то алгоритмами.
0
0 / 6 / 0
Регистрация: 16.11.2017
Сообщений: 36
23.11.2017, 22:42  [ТС] 18
спасибо за ответ )
а можете в моём коде подкорректировать , чтобы работало корректно ?
0
23.11.2017, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2017, 22:42
Помогаю со студенческими работами здесь

Упорядочьте строки по неубыванию сумм цифр элементов этой строки
1)Пусть дана матрица A(n x m). Упорядочьте строки по неубыванию сумм цифр элементов этой строки....

Вставить в начало каждой строки файла ее номер и записать преобразованные строки в новый файл
Дан текстовый файл. Вставить в начало каждой строки ее номер и записать преобразованные строки в...

Для каждой строки файла вычислить сумму этих чисел и результат записать этой же строке
Файл состоит из строк, содержащих несколько целых чисел, записанных через запятую. Для каждой...

Каждый элемент соответствующей строки разделить на сумму элементов этой строки
Задан двухмерный массив вещественных чисел А(n,m). Необходимо каждый элемент соответствующей строки...

Каждый элемент строки матрицы разделить на сумму элементов этой строки
Доброго времени суток. Решите пожалуйста задачу Составить программу для выполнения заданных...

величить элементы каждой строки на сумму элементов этой строки
Дан двумерный массив содержащий 4 строки и 3 столбца. Элементами массива являются целые числа....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru