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
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
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
АлексейАлексей
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
Подходить:
- Итерируйте по длине строки и продолжайте преобразовывать символы в их ASCII
- Продолжайте складывать значения до конца предложения.
- Когда мы сталкиваемся с пробелом, мы сохраняем сумму, рассчитанную для этого слова, и снова устанавливаем сумму, равную нулю.
- Позже мы печатаем элементы
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(" "); }
Необходимо, чтобы она выводила сумму кодов строки из файла.