Как найти сумму символов слова

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 <string.h>
 
int sum_symbols (char *);
void reverse_word (char *, int);
 
int main (void) {
    char word[] = "Hello";          // заданное слово
 
    int sum = sum_symbols(word);    // находим сумму кодов символов слова
    printf("sum = %dn", sum);      // выводим сумму на экран
 
    if (sum % 2 == 0) {             // если сумма четная
        reverse_word(word, strlen(word));   // переворачиваем слово
        puts(word);                         // выводим его на экран
    }
    return 0;                       // конец программы
} 
// -------------------------------------------------------------
int sum_symbols (char *word) {
    int sum = 0;
    for (char *a = word; *a != ''; a++)
        sum += *a;
    return sum;
}
// -------------------------------------------------------------
void reverse_word (char *word, int size) {
    char tmp;
    for (int i = 0, k = size-1; i < k; ++i, --k)
        tmp = word[i],
        word[i] = word[k],
        word[k] = tmp;
}
// -------------------------------------------------------------
y = input('Введите строку:n')

for i in x:
    count = 0
    for r in y:
        if i == r:
            count += 1
    if count > 0:
       print('Букв', i, 'было', count)
            
print('Всего букв: ')```

задан 18 мар 2022 в 15:29

Пётр Олейников's user avatar

3

Если вам просто нужно подсчитать количество букв в предложении, то вот вариант:

import string
line = input('Введите строку: ')

for p in string.punctuation:
    if p in line:
        line = line.replace(p, '')
line = line.replace(' ', '')
count = 0

for word in line:
    for letter in word:
        print(letter)
        count += 1

print(count)

ответ дан 18 мар 2022 в 16:32

arnold's user avatar

arnoldarnold

1,2363 серебряных знака15 бронзовых знаков

Можно короче подсчитать кол-во букв в фразе:

print(len(input('Введите строку: ').replace(" ", "")))

Ну или сформировать список неучитываемых символов:

data_replace = [' ', '.', ',', '-']
text_data = input('Введите строку: ')
for i in data_replace:
    text_data = text_data.replace(i, "")
print(len(text_data))

Или по другому пути – тут быстрее подсчет будет:

data_replace = "!"#$%&'()*+, -./:;<=>?@[]^_`{|}~"
text_data = input('Введите строку: ')
count = 0
for i in text_data:
    if i in data_replace:
        continue
    count += 1

print(count)

ответ дан 18 мар 2022 в 16:38

Алексей's user avatar

АлексейАлексей

1,6011 золотой знак4 серебряных знака20 бронзовых знаков

2

30.12.2019Строки

Нам дано предложение английского языка (также может содержать цифры), нам нужно вычислить и вывести сумму значений ASCII символов каждого слова в этом предложении.

Примеры:

Input :  GeeksforGeeks, a computer science portal for geeks
Output : Sentence representation as sum of ASCII each character in a word:
         1361 97 879 730 658 327 527 
         Total sum -> 4579
Here, [GeeksforGeeks, ] -> 1361, [a] -> 97, [computer] -> 879, [science] -> 730
      [portal] -> 658, [for] -> 327, [geeks] -> 527 

Input : I am a geek
Output : Sum of ASCII values:
         73 206 97 412 
         Total sum -> 788

Подходить:

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

C ++

#include <iostream>
#include <string>
#include <vector>

using namespace std;

long long int ASCIIWordSum(string str,

                          vector<long long int>& sumArr)

{

    int l = str.length();

    int sum = 0;

    long long int bigSum = 0L;

    for (int i = 0; i < l; i++) {

        if (str[i] == ' ') {

            bigSum += sum;

            sumArr.push_back(sum);

            sum = 0;

        }

        else

            sum +=  str[i];        

    }

    sumArr.push_back(sum);

    bigSum += sum;

    return bigSum;

}

int main()

{

    string str = "GeeksforGeeks a computer science "

                 "portal for Geeks";

    vector<long long int> sumArr;

    long long int sum = ASCIIWordSum(str, sumArr);

    cout << "Sum of ASCII values:" << std::endl;

    for (auto x : sumArr)

        cout << x << " ";

    cout << endl  << "Total sum -> " << sum;

    return 0;

}

Джава

import java.util.*;

import java.lang.*;

class Rextester {

    static long ASCIIWordSum(String str, long sumArr[])

    {

        int l = str.length();

        int pos = 0;

        long sum = 0;

        long bigSum = 0;

        for (int i = 0; i < l; i++) {

            if (str.charAt(i) == ' ') {

                bigSum += sum;

                sumArr[pos++] = sum;

                sum = 0;

            }

            else

                sum += str.charAt(i);            

        }

        sumArr[pos] = sum;

        bigSum += sum;

        return bigSum;

    }

    public static void main(String args[])

    {

        String str = "GeeksforGeeks, a computer science portal for geeks";

        int ctr = 0;

        for (int i = 0; i < str.length(); i++) 

            if (str.charAt(i) == ' ')

                ctr++;

        long sumArr[] = new long[ctr + 1];

        long sum = ASCIIWordSum(str, sumArr);

        System.out.println("Sum of ASCII values:");

        for (int i = 0; i <= ctr; i++)

            System.out.print(sumArr[i] + " ");

        System.out.println();

        System.out.print("Total sum -> " + sum);

    }

}

Python 3

def ASCIIWordSum(str, sumArr):

    l = len(str)

    sum = 0

    bigSum = 0

    for i in range(l):

        if (str[i] == ' '):

            bigSum += sum

            sumArr.append(sum)

            sum = 0

        else:

            sum += ord(str[i])     

    sumArr.append(sum)

    bigSum += sum

    return bigSum

if __name__ == "__main__":

    str = "GeeksforGeeks a computer science portal for Geeks"

    sumArr = []

    sum = ASCIIWordSum(str, sumArr)

    print("Sum of ASCII values:" )

    for x in sumArr:

        print(x, end = " ")

    print()

    print("Total sum -> ", sum)

C #

using System;

class GFG {

    static long ASCIIWordSum(String str, long []sumArr)

    {

        int l = str.Length;

        int pos = 0;

        long sum = 0;

        long bigSum = 0;

        for (int i = 0; i < l; i++) {

            if (str[i] == ' ')

            {

                bigSum += sum;

                sumArr[pos++] = sum;

                sum = 0;

            }

            else

                sum += str[i];         

        }

        sumArr[pos] = sum;

        bigSum += sum;

        return bigSum;

    }

    public static void Main()

    {

        String str = "GeeksforGeeks, a computer " +

                     "science portal for geeks";

        int ctr = 0;

        for (int i = 0; i < str.Length; i++) 

            if (str[i] == ' ')

                ctr++;

        long []sumArr = new long[ctr + 1];

        long sum = ASCIIWordSum(str, sumArr);

        Console.WriteLine("Sum of ASCII values:");

        for (int i = 0; i <= ctr; i++)

            Console.Write(sumArr[i] + " ");

        Console.WriteLine();

        Console.Write("Total sum -> " + sum);

    }

}

Выход:

Sum of ASCII values:
1317 97 879 730 658 327 495 
Total sum -> 4503

Сложность подхода

Рекомендуемые посты:

  • Вывести каждое слово в предложении с соответствующим им средним значением ASCII
  • Распечатать данное предложение в его эквивалентной форме ASCII
  • Преобразовать предложение значения ASCII в его эквивалентную строку
  • Вывести самое длинное палиндромное слово в предложении
  • Программа для замены слова со звездочками в предложении
  • Программа для длины самого длинного слова в предложении
  • Java программа для подсчета символов в каждом слове в заданном предложении
  • Функция карты и словарь в Python для суммирования значений ASCII
  • Среднее ASCII-значений символов данной строки
  • Преобразовать строку в шестнадцатеричные значения ASCII
  • Проверьте, содержит ли строка только алфавиты в Java, используя значения ASCII
  • Минимизируйте сумму значений ASCII после удаления всех вхождений одного символа
  • Количество символов в строке, значения ASCII которых являются простыми
  • Подсчитать количество слов, имеющих сумму значений ASCII, меньшую и большую, чем k
  • Найти сумму значений символов, которые присутствуют в простых позициях.

Суммы значений ASCII каждого слова в предложении

0.00 (0%) 0 votes

You can use an intermediate bytearray to speed things up:

>>> sum(bytearray("abcdefgh"))
804

This is not 17 times faster than the generator—it involves the creation of an intermediate bytearray and sum still has to iterate over Python integer objects—but on my machine it does speed up summing an 8-character string from 2μs to about 700ns. If a timing in this ballpark is still too inefficient for your use case, you should probably write the speed-critical parts of your application in C anyway.

If your strings are sufficiently large, and if you can use numpy, you can avoid creating temporary copies by directly referring to the string’s buffer using numpy.frombuffer:

>>> import numpy as np
>>> np.frombuffer("abcdefgh", "uint8").sum()
804

For smaller strings this is slower than a temporary array because of the complexities in numpy’s view creation machinery. However, for sufficiently large strings, the frombuffer approach starts to pay off, and it of course always creates less garbage. On my machine the cutoff point is string size of about 200 characters.

Also, see Guido’s classic essay Python Optimization Anecdote. While some of its specific techniques may by now be obsolete, the general lesson of how to think about Python optimization is still quite relevant.


You can time the different approaches with the timeit module:

$ python -m timeit -s 's = "a" * 20' 'sum(ord(ch) for ch in s)' 
100000 loops, best of 3: 3.85 usec per loop
$ python -m timeit -s 's = "a" * 20' 'sum(bytearray(s))'
1000000 loops, best of 3: 1.05 usec per loop
$ python -m timeit -s 'from numpy import frombuffer; s = "a" * 20' 
                      'frombuffer(s, "uint8").sum()' 
100000 loops, best of 3: 4.8 usec per loop

Подскажите, как подправить программу, так как не работает. Комментарии в тексте

#include <stdio.h>
void main()
{
    FILE *input_file;
    float *t; // массив, содержащий коды символов
    int n, i, sum;
    char buf[4096]; // строка из файла
    char input_file_name[81];// имя файла
    printf("Inrut file name? ");
    scanf("%s", input_file_name);
    input_file = fopen(input_file_name, "rt");
    if (input_file==NULL)
      {
        printf("nError opening file!");
        exit();
      }
    fgets(buf, sizeof(buf), input_file);
    n = strlen(buf);// длина строки из файла
    t = (float *)malloc(n*sizeof (float));// тут выделяю память
   for (i = 1; i < n; i++)
      {
        t[i-1] = (int)buf;// здесь должен находиться код символа
        sum+=t[i-1];// а тут его сумма 
                      //     это и не работает
      }
    free(t);
    printf("%d", sum);
    scanf(" ");
}

Необходимо, чтобы она выводила сумму кодов строки из файла.

Добавить комментарий