#c
#c
Вопрос:
Очень новичок в «backend» и пытаюсь выполнить эту задачу reddit, которую я видел на r / dailyprogrammer
Задача: присвоить каждой строчной букве значение, от 1 для a до 26 для z. Учитывая строку строчных букв, найдите сумму значений букв в строке.
Я специально хочу сделать это так, но возможно ли это? Как пользователь может ввести слово, которое затем добавило бы int, который я перечислил здесь, чтобы отображалась общая сумма слова.
int main()
{
int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
a=1;
b=2;
c=3;
d=4;
e=5;
f=6;
g=7;
h=8;
i=9;
j=10;
k=11;
l=12;
m=13;
n=14;
o=15;
p=16;
q=17;
r=18;
s=19;
t=20;
u=21;
v=22;
w=23;
x=24;
y=25;
z=26;
Комментарии:
1. Похоже, что задача состоит в том, чтобы присвоить некоторым данным метки, по которым позже можно будет выполнить поиск по заданной строке поиска. Это полностью отличается от того, что вы делаете. Даже если задача не понятна, вам следует начать с книги для начинающих по c .
2. Проверьте это: [ en.cppreference.com/w/cpp/io/cin ]
3. Вы путаете имена переменных с символами. Персонаж
'a'
не имеет никакого отношения к переменному имениa
. Что вам нужно сделать, это: 1) Научиться читать строку пользовательского ввода 2.) Напишите функцию, которая принимает единицуchar
и возвращает соответствующие числа 1-26 и 3.) выполните итерацию по пользовательскому вводу, вызовите функцию из (2) для каждого символа и суммируйте результаты.4. Я думаю, у вас довольно фундаментальные недоразумения о том, как работает C . Переменная с именем «a» имеет тип «int» со значением «1». Но вам нужно искать символьное значение (
char
) , а они совершенно не связаны с именами переменных.5. хорошо, кажется, мое понимание далеко от того, что я ожидал, спасибо вам за это. И означает ли это, что то, что я пытаюсь сделать здесь, изначально неверно?
Ответ №1:
Это в значительной степени один вызов функции в C
std::string example = "example";
std::cout << std::accumulate(example.begin(), example.end(), 0,
[](int sum, char c) { return sum (c - 'a' 1); }
);
std::accumulate
добавляет вещи в коллекцию. Обычно он просто использует ‘ ‘, но в этом случае я использую пользовательский сумматор [](int sum, char c) { return sum (c - 'a' 1); }
. Это добавляет не значение ASCII c
, а (c - 'a' 1)
. Если c=='a'
, то c-'a'==0
и (c - 'a' 1)==1
Комментарии:
1. Привет! Прежде всего, спасибо за помощь, я никогда не слышал о std::accumulate и других связанных функциях, я использую веб-сайт w3schools в качестве основной ссылки у вас есть какие-либо рекомендации для такого новичка, как я?
2. @ramesays: Вы действительно должны получить хорошую книгу. В то время как cppreference.com это хороший справочный сайт, но, к сожалению, пока нет хорошего учебного сайта.
Ответ №2:
итак, это мой код, и он работает… объяснение -> мы знаем, что при сохранении символа в int
переменной будет сохранено значение ASCII, значение ASCII a
равно 97 , b
равно 98 и так далее…. вычитание 96 из значения ascii каждой буквы даст нужное вам число -> если вы все еще не уверены в таблице ascii, тогда посмотрите ее в Google, вы поймете
#include <iostream>
#include <string>
using namespace std;
int main(){
string str ;
cin >> str;
int value = 0;
for(int i=0 ; i<str.length() ; i ){
int v = str[i] - 96;
value = v;
}
cout << value;
return 0;
}
Комментарии:
1. Это «96» трудно понять. Вместо этого вы можете просто написать
str[i] - 'a'
. Эта символьная константа имеет правильное значение.2. @MSalters да, но тогда нумерация будет начинаться с 0, а не с 1, вопрос, который он задал, имеет нумерацию с 1
3.
str[i] - 'a' 1
, все еще не так сложно.4. @MSalters да, вы тоже можете это сделать, но я не думаю, что он сможет это понять…
5. @NamrataMundhra IMO
str[i] - 96
еще более запутанный.str[i] - 'a' 1
избегает магического числа.
Ответ №3:
используйте std::map<char,int>
int main(void)
{
std::map<std::string,int> list;
char letter = 'a';
int val = 1;
while(val <= 26)
{
list.insert(std::make_pair(letter,val));
letter ;
val ;
}
}
Ответ №4:
Вы путаете понятие строк и символов с именем переменной.
// a is the variable name, this is information for the programmer
int a = 1;
// 'a' here is the actual letter a, things can actually be done with this in the program
char theLetterA = 'a';
Объедините эту концепцию с std::cin
тем, чтобы вы могли считывать данные от пользователя, и вы на пути к выяснению этого.
См.: