我一直在尝试解决此任务,但没有取得积极成果。

因此,我的任务是检查字符串是否为以16为底的数字。

例如:s =“1AB”,它将显示YES 427

这是我的代码。

#include <iostream>
#include <string.h>
using namespace std;
 int power (int a, int b)
 {
     if(b==1) return a;
     else return a*power(a,b-1);
 }
 void conv(char s[],int &n)
 {
     int S=0,i,p=0;
     for(i=n-1;i>=0;i--)
     {
         if(s[i]>='0' && s[i]<='9')
            S+=(s[i]-48) * power(16,p); //ex:s[i]='1' ==> S+=(49-49)*...
         else S+=(s[i]-55) * power(16,p); //s[i]='A' ==> S+=(65-55) *...
         p++;
     }
 }
int main()
{
 int n,i,k=0;
 char s[255];
 cin.get(s,255);
 cin.get();
 n=strlen(s);
 for(i=0;i<n;i++)
 {
     if(strchr("0123456789ABCDEF",s[i])) k++;
 }
 if(k==0) cout<<"not in base 16";
 else{
    conv(s,n); cout<<s;}
return 0;
}

最佳答案

您可以只使用std::isxdigit,例如:

#include <cctype>
#include <string>
#include <iostream>

bool IsThisStringAHexNumber(std::string const &str)
{
    for (size_t i = 0, n = str.length(); i < n; ++i)
        if (!std::isxdigit(str[i]))
            return false;

    return true;
}

int main()
{

    std::cout << std::boolalpha << IsThisStringAHexNumber("298722h2jjh") << std::endl;
    std::cout << std::boolalpha << IsThisStringAHexNumber("2abc66f") << std::endl;

    return 0;
}

打印品:
false
true

08-19 18:52