Функция для получения порядкового номера?

Я собирался написать функцию C ++, выполнив следующее:

1 ---> "1st"2 ---> "1nd"3 ---> "3rd"...
17657 --> "17657th"...

то есть производит порядковую строку расширения для этого числа (это не должно делать itoa() самого номера). Но потом я подумал: «Что-то в стандартной библиотеке или Boost уже делает это?»

Заметки:

  • Я знаю, это не трудно написать это, есть реализация в Python прямо здесь, на SO, я просто не хочу дублировать код.
  • Мне нужно это на английском, очевидно. Многоязычная версия была бы хороша для соображений политкорректности, не более того …

0

Решение

Я уверен, что вы можете адаптировать решение с четырьмя линиями в Отображать числа с порядковым суффиксом в PHP. К сожалению, я не думаю, что есть такая вещь в обычной C ++ lib.

0

Другие решения

попробуй это…

#include <iostream>
using namespace std;

void suffix(int n, char suff[]);
// creates the ordinal suffix
// for a given number

int main()
{
char s[5];
int x;

cout << "Enter a number to find the ordinal suffix for ";
cin >> x;
suffix(52111,s);
}

void suffix(int n, char suff[])
{
if(n%100 == 11 || n%100 == 12 || n%100 == 13)
{
cout << "suffix is: " << n << "th";
cout << endl;
}
else
{
if(n%10 == 1)
{
cout << "Suffix is: " << n << "st";
cout << endl;
}
else
{
if(n%10 == 2)
{
cout << "Suffix is: " << n << "nd";
cout << endl;
}
else
{
if(n%10 == 3)
{
cout << "Suffix is: " << n << "rd";
cout << endl;
}
else
{
if(n%10 == 4 || n%10 == 5 || n%10 == 6 || n%10 == 7 || n%10 == 8 || n%10 == 9 || n%10 == 0)
{
cout << "Suffix is: " << n << "th";
cout << endl;
}
}
}
}
}
}
0

Для этого я использовал следующую строковую функцию.

#include <string>
#include <iostream>
using namespace std;

string ordinal(int i)
{
if(i==1)
{
return "First";
}
if(i==2)
{
return "Second";
}
if(i==3)
{
return "Third";
}
if(i==4)
{
return "Fourth";
}
if(i==5)
{
return "Fifth";
}
if(i==6)
{
return "Sixth";
}
if(i==7)
{
return "Seventh";
}
if(i==8)
{
return "Eighth";
}
}

int main()
{
for(int i=0; i<8; i++)
{
cout << ordinal(i+1) << " number: ";
}
return 0;
}
0

Вот что я в итоге написал:

const char* ordinal_suffix(int n)
{
static const char suffixes [][3] = {"th", "st", "nd", "rd"};
auto ord = n % 100;
if (ord / 10 == 1) { ord = 0; }
ord = ord % 10;
if (ord > 3) { ord = 0; }
return suffixes[ord];
}

Решения Code Golod милые, но они действительно оптимизируют для краткости, а не для чего-то еще. Это быстрее (хотя это можно сделать еще быстрее, поместив суффиксы в .cpp из тела функции и сделав код встраиваемым), гораздо более понятным и все же более кратким, чем большинство других ответов здесь.

0
По вопросам рекламы [email protected]