atoi 相关问题

atoi()是C运行时库函数,用于将数字的ASCII表示转换为整数。此SO标记也适用于atol(),atoll()和atoq(),它们执行与“long”和“long long”类型相同的转换。

C 中的 ATOI 与服务器/客户端 GMS 应用程序中的其他字符串混淆

您好,我们正在尝试进行 GMS 服务器/客户端聊天。 我们在这部分代码上使用 atoi 时遇到问题 unserialize_tcp(缓冲区,&类型,&grpname,&member_name,&

回答 1 投票 0

C - 比较数字字符串

出于专业的好奇心,在 C 中比较两个全数字字符串的最安全/最快/最有效的方法是什么? #包括 #包括 #包括 出于专业好奇心,在 C 中比较两个全数字字符串的最安全/最快/最有效的方法是什么? #include <stdio.h> #include <string.h> #include <stdlib.h> int main(void){ char str1[5] = "123"; char str2[5] = "123"; char *ptr; if(atoi(str1) == atoi(str2)) printf("Equal strings"); if(strtol(str1,&ptr,10) == strtol(str2,&ptr,10)) printf("Equal strings"); if(strcmp(str1,str2)==0) printf("Equal strings"); return 0; } 在我看来,strcmp (),因为它不需要任何数字转换。但在这种情况下,您需要确保其中一个存储仅包含数字字符的字符串。 你也可以在绳子上做memcmp () 编辑1 正如其他人关于前导零所指出的那样,您可以手动扫描前导零并通过将指针传递给第一个非零数字来调用 strcmp () 或 memcmp ()。 编辑2 下面的代码告诉了我想说的。这仅适用于整数,不适用于浮点数。 int main (void) { char s1[128], s2[128]; char *p1 = s1, *p2 = s2; /* populate s1, s2 */ while (*p1 && (*p1 == '0')) p1++; while (*p2 && (*p2 == '0')) p2++; if (strcmp (p1, p2) == 0) printf ("\nEqual"); else printf ("\nNot equal"); printf ("\n"); return 0; } 对于浮点数,应手动去掉小数点后面的零。 或者手动完成所有工作。 编辑4 我还希望您看看这段浮点代码。这将检测小数点之前的前导零和小数点之后的尾随零。例如 对于以下代码00000000000001.10000000000000和1.1将是Equal int main (void) { char s1[128], s2[128]; char *p1, *p2, *p1b, *p2b; printf ("\nEnter 1: "); scanf ("%s", s1); printf ("\nEnter 2: "); scanf ("%s", s2); p1 = s1; p2 = s2; /* used for counting backwards to trim trailing zeros * in case of floating point */ p1b = s1 + strlen (s1) - 1; p2b = s2 + strlen (s2) - 1; /* Eliminate Leading Zeros */ while (*p1 && (*p1 == '0')) p1++; while (*p2 && (*p2 == '0')) p2++; /* Match upto decimal point */ while (((*p1 && *p2) && ((*p1 != '.') && (*p2 != '.'))) && (*p1 == *p2)) { p1++; p2++; } /* if a decimal point was found, then eliminate trailing zeros */ if ((*p1 == '.') && (*p2 == '.')) { /* Eliminate trailing zeros (from back) */ while (*p1b == '0') p1b--; while (*p2b == '0') p2b--; /* match string forward, only upto the remaining portion after * discarding of the trailing zero after decimal */ while (((p1 != p1b) && (p2 != p2b)) && (*p1 == *p2)) { p1++; p2++; } } /* First condition on the LHS of || will be true for decimal portion * for float the RHS will be . If not equal then none will be equal */ if (((*p1 == '\0') && (*p2 == '\0')) || ((p1 == p1b) && (p2 == p2b))) printf ("\nEqual"); else printf ("\nNot equal"); printf ("\n"); return 0; } 使用前需要进行一些测试。 str(n)cmp是最快最安全的。 假设您正在寻找相同的,strncmp将是最快和最安全的,因为它可以进行直接比较而无需任何转换。人们普遍认为它比strcmp更安全。 但是,如果您希望 00 和 0 相等,或者以其他方式稍微不同地表示相同数字,则需要使用 atoi。 在我看来,“最安全”的方法可能是将两个参数都转换为整数然后进行测试,这样您就可以避免潜在的前导零问题。但这可能不是最快或最有效的方法。 您可以简单地使用以下内容: 如果(strcmp(“123”,“123”)== 0) { printf("The strings are equal"); } 否则 { printf("The strings are not equal."); } 我认为它应该有效。 我建议对整数采用这种方式: int strcmp_for_integers(char *aa, char *bb){ char aa2[11] = ""; char bb2[11] = ""; int answer; sprintf(aa2, "%010d", atoi(aa)); sprintf(bb2, "%010d", atoi(bb)); answer = strcmp(aa2, bb2); return answer; }

回答 6 投票 0

安全地将 std::string_view 转换为 int (如 stoi 或 atoi)

有没有安全的标准方法将 std::string_view 转换为 int ? 由于 C++11 std::string 让我们使用 stoi 转换为 int: std::string str = "12345"; int i1 = stoi(str); // 哇...

回答 4 投票 0

使用 strtol() 和 atoi() 函数时的内存修改

我有代码(例如稍微简化一下) char *op = CURRENT_PARSED_STRING.操作数; 如果(操作){ printf("%s “,同上); 字符 q[] = "12h"; int a = atoi(q); 打印...

回答 1 投票 0

有逻辑错误,即使大于max也会继续addOrder

我认为我的代码有逻辑错误,如果我输入一个大于 max 的数字,则会显示错误 void,但它仍然继续进行 addOrder。我想循环它,如果用户输入无效,它会......

回答 1 投票 0

atoi() 函数将垃圾返回到终端 STM32,C lang

我对 atoi() 函数有一些疑问。我正在尝试将从 HAL_UART_Receive_IT 函数接收到的字符串数据转换为整数,然后再次发送到终端。我在出口处有什么

回答 1 投票 0

重新创建atoi函数max long long error

我在输出中遇到问题,尽管我定义了 max long long 的宏来处理溢出,但它仍然给了我错误的输出 # 定义 LLONG_MAX 9223372036854775807LL 如你所见...

回答 1 投票 0

stdlib.h 不能按预期使用 atoi() 函数

在我的程序中,我使用 atoi() 函数从 argv 中提取一个 int。当我使用时: #包括 我收到以下错误: cachesim.c:20: 警告:从

回答 2 投票 0

这两个函数有什么区别,后者不考虑参数中的所有字符串,而第一个函数考虑

我写了一个函数,意思是像 函数 atoi: int _atoi(字符*s) { int i, neg = 1, n = 0; 对于 (i = 0; s[i] != ' '; i++) { 如果 ((s[i] >= '0') &...

回答 2 投票 0

如何创建一个递归函数,其中整数在 C 中的每个函数调用中递增

我基本上想知道如何编写下面的内容,但没有具有两个输入的函数 atoi

回答 0 投票 0

atoi()在应用于一个大的命令行参数时产生错误的值。

我从命令行读入了300000000000的值,然后用astoi把它转换为int64_t,但是它却输出了错误的值。 int main(int argc, char * const argv[]){ int64_t timeSlice = -1; if(...

回答 1 投票 0

atoi()在应用于一个大的命令行参数时产生错误的值。

我从命令行读入了300000000000的值,然后用atoi把它转换为int64_t,但是它却输出了错误的值。 void foo(int64_t timeSlice){ cout<

回答 2 投票 0

如何确保命令参数的每个字符都是十进制数字?

我们必须编写代码以加密凯撒的密码。步骤之一是:您的程序没有打印输出所提供的命令行参数,而是检查以确保该字符的每个字符都... ...>

回答 2 投票 0

C ++如何确保命令参数的每个字符都是十进制数字?

我们必须编写代码以加密凯撒的密码。步骤之一是:您的程序没有打印输出所提供的命令行参数,而是检查以确保该字符的每个字符都... ...>

回答 1 投票 -1

实现我自己的Atoi()时有一些错误

我听不懂。当我的函数从主字符中的char返回时,是随机数。原始atoi()返回-1。我当前正在使用C11版本。我收到某人的消息,那是因为int溢出...

回答 1 投票 0

如何从文本文件中读取类似“ 10:55”的时间,以便我们可以用C编程语言对其进行计算?

我正在尝试从文本文件中读取类似数据的时间(即10:55),并以可以对其进行计算的方式进行分配。例如,如果我想从10:55开始隐蔽10小时55分钟...

回答 1 投票 0

变量从atoi分配C中丢失它的值

我是C人士的新手,请放轻松!我试图从命令行参数中获取一个数字,并将其用于整个代码的多次计算中。在命令行中输入的数字为...

回答 1 投票 -2

从MIPS上的.csv文件读取数据

我必须开发一个项目,在该项目中我必须从.csv文件中读取数据,如下所示:10,12.1 15,25.6 15,25.1 ...因此,我尝试读取如下内容:.data文件:.asciiz“ / home /gilson/Documents/test.csv“ ...

回答 1 投票 0

使用atoi函数将字符串转换为整数时出现分段错误

虽然尝试使用atoi函数将字符串转换为整数,但没有任何输出。调试后,它在行t = atoi(s [i])中显示分段错误。这是您的代码...

回答 1 投票 0

将字符串时间戳HH:MM:SS转换为C中的整数

原谅我,我只是第一次学习C。基本上,我有一系列包含时间戳的字符串,其格式为“ HH:MM:SS”。我正在寻找一种形式如下的函数...

回答 2 投票 2

© www.soinside.com 2019 - 2024. All rights reserved.