Я собирался написать функцию C ++, выполнив следующее:
1 ---> "1st"2 ---> "1nd"3 ---> "3rd"...
17657 --> "17657th"...
то есть производит порядковую строку расширения для этого числа (это не должно делать itoa()
самого номера). Но потом я подумал: «Что-то в стандартной библиотеке или Boost уже делает это?»
Заметки:
Я уверен, что вы можете адаптировать решение с четырьмя линиями в Отображать числа с порядковым суффиксом в PHP. К сожалению, я не думаю, что есть такая вещь в обычной C ++ lib.
попробуй это…
#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;
}
}
}
}
}
}
Для этого я использовал следующую строковую функцию.
#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;
}
Вот что я в итоге написал:
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 из тела функции и сделав код встраиваемым), гораздо более понятным и все же более кратким, чем большинство других ответов здесь.