Я хочу сравнить две строки чисел, чтобы подсчитать каждое вхождение одной цифры
#include <cstdlib>
#include <iostream>
using namespace std;
void function(string number1, string number2)
{
int taille = number1.size();
int tab[]={0,0,0,0,0,0,0,0,0,0};
int chiffre=0;
for (int i=0; i<taille;i++) {
for (int j=0;j<taille;j++){
if (number1[i]==number2[j])
{
cout << "chiffre " <<number1[i]<< endl;
chiffre = number1[i];
tab[chiffre]++;
}
}
}
for (int i=0; i<10;i++) {
if (tab[i]!=0)
cout << "index " << i<< " value "<< tab[i]<< endl;
}
}
int main(int argc, char *argv[])
{
string number1 = "5143436111";
string number2 = "4501234567";
function(number1,number2);
cout << "Press the enter key to continue ...";
cin.get();
return EXIT_SUCCESS;
}
Строка с вкладкой [chiffre] ++; похоже, сбой программы. Пожалуйста, объясните мне, почему
Тебе нужно:
chiffre = number1[i]-'0';
Кроме того, у вас есть следующее:
int taille = number1.size();
Но что, если число1 и номер2 имеют разные размеры? Тогда ваш внутренний цикл (например, for (int j=0;j<taille;j++)
может индексироваться из числа 2, если number2 меньше числа 1, или он не будет достаточно циклы, если число2 больше числа 1.
Когда вы используете tab ["5"], вы используете значение ascii 5, которое равно 53, выходящее из 10 привязки. Вам нужно указать значение ascii или использовать вкладку [chiffre-48] 48 is'0 'в ascii
Проблема в этой строке:
chiffre = number1[i];
Когда вы назначаете номер chiffre
, он не будет назначать его как число (от 0 до 9), а как код ASCII (от "0" до "9").
Вы можете преобразовать его в число, используя это:
chiffre = number1[i] - '0';
в этой строке:
chiffre = number1[i];
вы преобразовываете символ (например, "5") в целое число. Должен быть:
chiffre = number1[i] - '0';
Я не знаю, что вы хотите получить точно, но я полагаю, вы хотите сравнить только первое число в номере1 с первым номером2 и что вы предполагаете два числа одинаковой длины? В этом случае ваш цикл должен стать следующим:
if (number1.size() == number2.size()){
for (int i=0; i<taille;i++) {
if (number1[i]==number2[i])
{
cout << "chiffre " <<number1[i]<< endl;
chiffre = number1[i] - '0';
tab[chiffre]++;
}
}
}
atoi()
, atoi()
ожидает строку, а не символ.
number1[i]
содержит некоторый символ, например, '5'
. Его код ASCII равен 53. В массиве нет 53 элементов.
Поэтому измените это утверждение
chiffre = number1[i];
в
chiffre = number1[i] - '0';
Также ваш алгоритм работает неправильно. Например, если число 1 равно "55"
а число 2 равно 45
тогда ваш алгоритм печатает цифру 5, содержащуюся в номере2 два раза.