将字符串(以char*形式给出)解析为int的C++方式是什么?强大而清晰的错误处理是一个优点(而不是返回零).
gcc 4.4.4 c89
将字符串转换为整数值更好.
我尝试了两种不同的方法atoi和sscanf.两者都按预期工作.
char digits[3] = "34";
int device_num = 0;
if(sscanf(digits, "%d", &device_num) == EOF) {
fprintf(stderr, "WARNING: Incorrect value for device\n");
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
或使用atoi
device_num = atoi(digits);
Run Code Online (Sandbox Code Playgroud)
我认为sscanf会更好,因为你可以检查错误.但是,atoi没有做任何检查.
我试图从正在解析的命令行中找出,哪个函数最好将十进制,十六进制或八进制数转换int为最佳数 - 不事先知道输入.
然后,目标是使用单个函数来识别不同类型的输入并将其分配给它的integer(int)值,然后可以使用它:
./a.out 23 0xC4 070
Run Code Online (Sandbox Code Playgroud)
可以打印
23
196 /*hexadecimal*/
56 /*octal*/
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一问题是解析找到十进制整数和八进制之间的差异.
边题,是否可以将字符串转换为整数使用?
我编写了以下代码....它应该将像"88"这样的字符串转换为double值88并打印出来
void convertType(char* value)
{
int i = 0;
char ch;
double ret = 0;
while((ch = value[i] )!= '\0')
{
ret = ret*10 +(ch - '0');
++i;
}
printf("%d",ret);//or %f..what is the control string for double?
}
//input string :88
Run Code Online (Sandbox Code Playgroud)
但它总是打印0 ...但是当我将ret的类型更改为int ...它工作正常...当类型为float或double时,它打印为零...所以为什么我得到这个模棱两可的结果?
我想知道是否有人可以解释如何通过命令行传递参数?我真的很困惑它是如何工作的。现在我正试图将一个整数传递给主程序。我该怎么做呢?
编辑:继续从指针获取初始化使整数没有强制转换 [-Wint-conversion] 错误?
#include <stdio.h>
#define PI 3.1416
int
main (int argc, char *argv[])
{
double r,area, circ;
char a = argv[1];
int num = a - '0';
printf("You have entered %d",num);
r= num/2;
area = PI * r * r;
circ= 2 * PI * r;
printf ("A circle with a diameter of %d ", num);
printf ("has an area of %5.3lf cm2\n", area);
printf ("and a circumference of %4.2lf cm.\n", circ);
return (0);
}
Run Code Online (Sandbox Code Playgroud) 我在其他语言中看到了很多关于这个问题的答案,但我试图找到一种方法来比较作为字符串给出的2个版本号.例如
str1 = "141.1.23"
str2 = "141.1.22"
Run Code Online (Sandbox Code Playgroud)
我试图找到一种方法来比较字符串中的整数值,看看哪一个更大.(在这种情况下,str1会更大).我想过使用atoi和strtok的某些时候,但我知道我不能一次标记2个字符串.有什么建议?
我遇到了一个非常简单的代码问题.我想接受1到3之间的整数,并进行错误检查.它适用于检查太大或太小的数字,但是当输入字母/数字组合时,它会陷入无限循环.建议?
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
int input;
cout << "\nPlease enter a number from 1 to 3:" << endl;
cout << "-> ";
cin >> input;
while(input< 1 || input> 3){
cout << "\n---------------------------------------" << endl;
cout << "\n[!] The number you entered was invalid." << endl;
cout << "\nPlease re-enter a number from 1 to 3" << endl;
cout << "-> ";
cin >> input;
}
cout << "You chose " << input …Run Code Online (Sandbox Code Playgroud) 处理一些需要在函数中使用unsigned char的加密,但希望在解密后转换为char以供使用.所以我有:
unsigned char plaintext[16];
char *plainchar;
int plainint;
... Code now populates plaintext with data that happens to all be plain text
Run Code Online (Sandbox Code Playgroud)
现在在这一点上,让我们说明文实际上是一个"0123456789"的数据字符串.如何将明文的值作为"012456789"获取为plainchar,同时将plainint作为123456789?
- 编辑 -
当明文等于"AAAAAAAAAA105450"时执行此操作:
unsigned char plaintext[16];
char *plainchar;
int plainint;
... Code now populates plaintext with data that happens to all be plain text
plainchar = (char*)plaintext;
Run Code Online (Sandbox Code Playgroud)
使plainchar等于"AAAAAAAAAA105450╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠┤∙7",sizeof = 51.加密代码是rijndael示例代码,所以它应该工作正常.
谢谢,本
在C编程语言中,一个字符串如"2147483649"溢出为int,因为最大的unsigned int是2147483647.当我想将整数字符串转换为ints时,如何检查这些溢出情况?
我不能只检查它是否是>=-(2^32-1),<= (2^32-1)因为将此字符串转换为int(例如atoi())的过程已经改变了这个值.是否有一种简单的方法,而不是在转换之前检查字符串的位数,以及每次检查每个数字以确保它在ints 的范围内?
对不起我的问题,我知道有很多类似的但是我没有找到任何简单的帮助我.
我已经开始用C编码并尝试解决一个简单的练习:从命令行读取整数数组,使用函数array_sum和打印结果对元素求和.(3个元素的输入示例数组:3 0 1 2)
int array_sum(int *array, size_t size);
int main(int argc, char **argv){
int sum=array_sum(argv, argc);
printf("array_sum: %i\n", sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是argv是一个char数组,函数需要一个整数数组.我应该在新的int数组中逐个转换元素吗?还有更好的方法吗?
需要将字符串转换unsigned int为C。我尝试使用sscanf()和strtoul(),但是在输入负数(例如将-123它们反转)时都不会使用它们,并且不会发出有关错误的信号。
我的意思是,那strtoul(-1)将返回,UNSIGNED_INT_MAX - 1而不是错误。
我需要一些可以做到的事情:
“ 123”-很好
“ -123”-错误
“ wewe”-错误
“ 123wew”-错误
老实说,我认为我编写的代码是垃圾,而且我不认为这是解决问题的最佳方法。我需要一些建议或改进来解决这个问题。我对编码还是新手。如果您能提供一些有关如何使用字符串和各种字符串函数的提示,我将不胜感激。
该字符串成为 IP 地址的条件:-
连接到互联网的设备的标识号。以点分四组表示法书写的 IPv4 地址由四个用句点分隔的 8 位整数组成。
换句话说,它是一个由四个数字组成的字符串,每个数字都在 0 到 255 之间(含 0 和 255),并带有“.”。每个数字之间的字符。所有数字都应不带前导零。
例子:
这是我的代码(我知道它是垃圾并且没有任何意义):-
bool isIPv4Address(char * inputString) {
int count = 0, period = 0;
int k = 0, i = 0;
int digit = …Run Code Online (Sandbox Code Playgroud)