获取数字序数的函数?

时间:2014-02-04 09:10:05

标签: c++ numbers tostring ordinals

我正准备编写一个C ++函数,执行以下操作:

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

即。生成该数字的序数扩展字符串(它不必自己编号itoa())。但后来我觉得“标准库中肯定有什么东西可以提升呢?”

注意:

  • 我知道写这个并不难,有一个implementation in Python就在这里,我只是不想重复代码。
  • 显然我用英语需要这个。多语言版本对于政治正确性考虑会很好,不仅仅是......

5 个答案:

答案 0 :(得分:0)

我很确定你可以在Display numbers with ordinal suffix in PHP调整四线解决方案。不幸的是,我认为在一个普通的C ++库中没有这样的东西。

答案 1 :(得分: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;
              }
        }
        }
    }
    }
}

答案 2 :(得分: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;
}

答案 3 :(得分: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];
}

代码高尔夫解决方案很可爱,但是 - 它们确实优化了简洁性,而不是其他任何东西。这更快(尽管通过将.cpp中的后缀放在函数体之外并使代码无法使用,可以更快地完成),更清晰,并且比其他大多数答案更简洁。

答案 4 :(得分:0)

// Returns numbers with ordinal suffix as string
// Based on https://stackoverflow.com/questions/3109978/display-numbers-with-ordinal-suffix-in-php
std::string NumberToOrdinal(size_t number) {
  std::string suffix = "th";
  if (number % 100 < 11 || number % 100 > 13) {
    switch (number % 10) {
      case 1:
        suffix = "st";
        break;
      case 2:
        suffix = "nd";
        break;
      case 3:
        suffix = "rd";
        break;
    }
  }
  return std::to_string(number) + suffix;
}