Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在将负整数转换为字符串时处理它们?_C_String_Integer_Logic - Fatal编程技术网

C 如何在将负整数转换为字符串时处理它们?

C 如何在将负整数转换为字符串时处理它们?,c,string,integer,logic,C,String,Integer,Logic,我需要将整数转换为字符串,可以是负数,也可以是正数。 到目前为止,我能够使用以下代码将正整数转换为字符串。 但不是消极的。如何正确处理它们以将其转换为字符串。 这是我使用的代码 谢谢 拉贾特 /* * C Program which Converts an Integer to String & vice-versa */ #include <stdio.h> #include <string.h> #include <math.h> voi

我需要将整数转换为字符串,可以是负数,也可以是正数。 到目前为止,我能够使用以下代码将正整数转换为字符串。 但不是消极的。如何正确处理它们以将其转换为字符串。 这是我使用的代码

谢谢

拉贾特

 /*
  * C Program which Converts an Integer to String & vice-versa
*/

#include <stdio.h>
#include <string.h>
#include <math.h>

void tostring(char [], int);


int main()
{
char str[10];
int num, result;

printf("Enter a number: ");
scanf("%d", &num);
tostring(str, num);
printf("Number converted to string: %s\n", str);


return 0;
}

void tostring(char str[], int num)
  {
    int i, rem, len = 0, n;

if(num<0)
{
    n=(-1)*(num);

}
else
{
    n=num;
}
while (n != 0)
{
    len++;
    n /= 10;
}
for (i = 0; i < len; i++)
{
    rem = num % 10;
    num = num / 10;
    str[len - (i + 1)] = rem + '0';
}
str[len] = '\0';
   }
/*
*将整数转换为字符串的C程序,反之亦然
*/
#包括
#包括
#包括
void-tostring(char[],int);
int main()
{
char-str[10];
int num,结果;
printf(“输入一个数字:”);
scanf(“%d”和&num);
tostring(str,num);
printf(“转换为字符串的数字:%s\n”,str);
返回0;
}
void tostring(char str[],int num)
{
int i,rem,len=0,n;

如果(num在执行任何其他操作之前,请查看
n
是否为负数。如果为负数,请使用符号
-
开始输出(确保
len
也比其他符号多一个,并且字符串化会在一个字符之后开始),将
n
设为正值,然后像以前一样继续操作。

只需使用
sprintf
函数,如下所示

sprintf(str,"%i",num);
所以修改后的代码是

#include <stdio.h>
#include <string.h>
#include <math.h>

void tostring(char [], int);


int main()
{
char str[10];
int num, result;

printf("Enter a number: ");
scanf("%d", &num);
//tostring(str, num);
sprintf(str,"%i",num);
printf("Number converted to string: %s\n", str);


return 0;
}

void tostring(char str[], int num)
  {
    int i, rem, len = 0, n;

n =num;
while (n != 0)
{
    len++;
    n /= 10;
}
for (i = 0; i < len; i++)
{
    rem = num % 10;
    num = num / 10;
    str[len - (i + 1)] = rem + '0';
}
str[len] = '\0';
   }
#包括
#包括
#包括
void-tostring(char[],int);
int main()
{
char-str[10];
int num,结果;
printf(“输入一个数字:”);
scanf(“%d”和&num);
//tostring(str,num);
sprintf(str,“%i”,num);
printf(“转换为字符串的数字:%s\n”,str);
返回0;
}
void tostring(char str[],int num)
{
int i,rem,len=0,n;
n=num;
而(n!=0)
{
len++;
n/=10;
}
对于(i=0;i

希望这能有所帮助。

这里有一个可以处理任何基的函数(你只需要找到足够的字符来表示数字),但它不能在一个角的情况下工作(你能找到这个例子吗?)

static const char Digits[]=“0123456789ABCDEFGHIJKLMNOPQRSTUWXYZ”;
静态字符*反转(字符*s,大小长度)
{
尺寸和位置;
用于(pos=0;posn=n<0?-n:n;//你必须像许多其他人所说的那样,对“极端情况”保持警惕:

  • 整数中不能有负整数的正值 int的范围值为[MIN;+MIN-1],类似于4字节int的-2147483648到2147483647。 因此,如果您有–2147483648,并且您有*-1,那么您将没有2147483648,因为它将溢出int容量

  • 查找int的len的循环是“bad”,因为在计数时不取负数(但我想这是本文的目的),也不取角点处的car(len值为0,但必须为1)

那么,如何实现这个功能呢

1:修复int len计算

size_t len = 1;

for (int n = number;  n <= -10 || 10 <= n; n /= 10) {
    ++len;
}
size\u t len=1;

对于(int n=number;n我在@Amadan的帮助下解决了这个问题。 这是我正在使用的代码。请随时告诉我一个更好的方法来解决这个问题。 谢谢 拉贾特

/*
*将整数转换为字符串的C程序,反之亦然
*/
#包括
#包括
#包括
void-tostring(char[],int);
int main()
{
char-str[10];
int num,结果;
printf(“输入一个数字:”);
scanf(“%d”和&num);
tostring(str,num);
printf(“转换为字符串的数字:%s\n”,str);
返回0;
}
void tostring(char str[],int num)
{
int i,rem,len=0,n;
布尔标志=0;

如果(numAre)出于练习的原因,你是否故意避免使用
itoa
sprintf
?因为它们几乎用一行代码替换了你的所有代码…是的@Amadan,我故意避免使用它。我想编写自己的代码来执行此操作。:)谢谢!“我想编写自己的代码”-那么你自己的代码或者至少你自己关于如何转换负值的想法在哪里呢?编程的一个主要部分是在实现之前想一想。这一部分需要小学数学基础。我尝试过这样做,但它给我奇怪的输出,这与我不将负值转换为po时得到的输出类似好的。那么请说明你在做什么。我们找不到没有人告诉我们的错误。如果是为了练习,我只为你做会适得其反,所以我将保留关于你的代码的提示,不写我自己的代码。我已经编辑了代码,这是我得到的输入一个数字:-67数字转换为字符串:)请注意,您将
n
转换为正数(顺便说一句,
n=-1)*(num)
n=-num
相同),但稍后您使用的是
num
,而不是
n
,这仍然是负数(因此您最终从
'0'
中减去数字,而不是添加数字,这会产生奇怪的字符)。您也没有将符号
'-'
输入到
str
中。谢谢,我想知道我是怎么漏掉了这一部分的。我将尝试解决它。并将更新同一个herdev?任何注释循环两次,可能需要80个时钟周期。@P_uj_uuuu。您的意思是什么?我理解在这种情况下,计算字符串的未来长度是非常困难的有点无用,但函数本身是非常不安全的,因为它使用“str”而不知道是否有足够的空间。因此,此函数的“更好”版本必须使用malloc,然后才有意义使用最终长度(尽管您仍然可以使用malloc 64 char并简单地反转最终字符串)。此外,我试图保持terra Weekend项目中使用的相同算法。你只是不考虑许多人(包括我)告诉你的极端情况,所以我会说:你的代码有漏洞。也许可以修复它?谢谢tom!我实际上是在使用此函数将传感器数据转换为字符串,我知道这将永远是错误的
size_t len = 1;

for (int n = number;  n <= -10 || 10 <= n; n /= 10) {
    ++len;
}
for (size_t i = 0; i < len; ++i) {
    str[len - i - 1] = abs(number % 10) + '0';
    number /= 10;
}
str[len] = '\0';
void tostring(char *str, int number)
{
    char   *digit = "9876543210123456789" + 9;
    size_t len    = 1;

    if (number < 0) {
        // TODO : Put '-' in the first case
        // TODO : Make str to be *str[1]
    }

    for (int n = number;  n <= -10 || 10 <= n; n /= 10) {
        ++len;
    }

    for (size_t i = 0; i < len; ++i) {
        str[len - i - 1] = digit[number % 10];
        number /= 10;
    }
    str[len] = '\0';
}
/*
* C Program which Converts an Integer to String & vice-versa
 */
 #include <stdio.h>
 #include <string.h>
 #include <math.h>

 void tostring(char [], int);


 int main()
 {
     char str[10];
     int num, result;

     printf("Enter a number: ");
     scanf("%d", &num);
     tostring(str, num);
     printf("Number converted to string: %s\n", str);


     return 0;
  }

 void tostring(char str[], int num)
 {
     int i, rem, len = 0, n;
     bool flag=0;
     if(num<0)
   {
       n=-num;
       flag=1;
   }
     else
   {
       n=num;
       flag=0;
   }
   while (n != 0)
   {
       len++;

       n /= 10;


    }
   if(flag==1)
    {
        num=-1*num;
        str[0]='-';

     }

    for (i = 0; i < len; i++)
    {

        rem = num % 10;
        num = num / 10;
        if(flag==1)
        {
            str[len - (i)] = rem + '0';

        }
        else
        {
           str[len - (i + 1)] = rem + '0';
        }   



       }
       if(flag==1)
       {
           str[len+1] = '\0';
       }
       else
       {
           str[len] = '\0';
       }



    }