相关疑难解决方法(0)

如何在C++中将字符串解析为int?

将字符串(以char*形式给出)解析为int的C++方式是什么?强大而清晰的错误处理是一个优点(而不是返回零).

c++ parsing

259
推荐指数
11
解决办法
21万
查看次数

将字符串转换为整数的sscanf或atoi有什么区别?

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没有做任何检查.

c scanf atoi

64
推荐指数
2
解决办法
12万
查看次数

atoi vs atol vs strtol vs strtoul vs sscanf

我试图从正在解析的命令行中找出,哪个函数最好将十进制,十六进制或八进制数转换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)

我能看到的唯一问题是解析找到十进制整数和八进制之间的差异.

边题,是否可以将字符串转换为整数使用?

c

16
推荐指数
2
解决办法
2万
查看次数

将字符串转换为C中的双变量

我编写了以下代码....它应该将像"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时,它打印为零...所以为什么我得到这个模棱两可的结果?

c string double atof

12
推荐指数
3
解决办法
8万
查看次数

在 C 中通过命令行传递一个整数?

我想知道是否有人可以解释如何通过命令行传递参数?我真的很困惑它是如何工作的。现在我正试图将一个整数传递给主程序。我该怎么做呢?

编辑:继续从指针获取初始化使整数没有强制转换 [-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)

c command-line integer character data-conversion

8
推荐指数
1
解决办法
3万
查看次数

比较c中的版本号

我在其他语言中看到了很多关于这个问题的答案,但我试图找到一种方法来比较作为字符串给出的2个版本号.例如

str1 = "141.1.23"
str2 = "141.1.22"
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法来比较字符串中的整数值,看看哪一个更大.(在这种情况下,str1会更大).我想过使用atoi和strtok的某些时候,但我知道我不能一次标记2个字符串.有什么建议?

c string-comparison version-numbering

6
推荐指数
3
解决办法
3755
查看次数

整数输入验证,怎么样?

我遇到了一个非常简单的代码问题.我想接受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)

c++ error-handling integer infinite-loop

5
推荐指数
1
解决办法
3万
查看次数

无符号字符到char*和C中的int?

处理一些需要在函数中使用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 int char visual-studio-2010 unsigned-char

3
推荐指数
1
解决办法
3955
查看次数

在C中从字符串更改为int时溢出

在C编程语言中,一个字符串如"2147483649"溢出为int,因为最大的unsigned int是2147483647.当我想将整数字符串转换为ints时,如何检查这些溢出情况?

我不能只检查它是否是>=-(2^32-1),<= (2^32-1)因为将此字符串转换为int(例如atoi())的过程已经改变了这个值.是否有一种简单的方法,而不是在转换之前检查字符串的位数,以及每次检查每个数字以确保它在ints 的范围内?

c string int

1
推荐指数
2
解决办法
2507
查看次数

如何将命令行参数读作整数而不是字符串?

对不起我的问题,我知道有很多类似的但是我没有找到任何简单的帮助我.

我已经开始用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数组中逐个转换元素吗?还有更好的方法吗?

c argv

1
推荐指数
1
解决办法
1008
查看次数

如何将字符串转换为unsigned int?C

需要将字符串转换unsigned int为C。我尝试使用sscanf()strtoul(),但是在输入负数(例如将-123它们反转)时都不会使用它们,并且不会发出有关错误的信号。

我的意思是,那strtoul(-1)将返回,UNSIGNED_INT_MAX - 1而不是错误。

我需要一些可以做到的事情:

“ 123”-很好

“ -123”-错误

“ wewe”-错误

“ 123wew”-错误

c string scanf type-conversion

0
推荐指数
1
解决办法
1万
查看次数

检查给定字符串是否为有效 IP 地址的建议/帮助/更好的解决方案

老实说,我认为我编写的代码是垃圾,而且我不认为这是解决问题的最佳方法。我需要一些建议或改进来解决这个问题。我对编码还是新手。如果您能提供一些有关如何使用字符串和各种字符串函数的提示,我将不胜感激。

该字符串成为 IP 地址的条件:-

连接到互联网的设备的标识号。以点分四组表示法书写的 IPv4 地址由四个用句点分隔的 8 位整数组成。

换句话说,它是一个由四个数字组成的字符串,每个数字都在 0 到 255 之间(含 0 和 255),并带有“.”。每个数字之间的字符。所有数字都应不带前导零。

例子:

  1. 192.168.0.1 是有效的 IPv4 地址
  2. 255.255.255.255 是有效的 IPv4 地址
  3. 280.100.92.101 不是有效的 IPv4 地址,因为 280 太大,无法成为 8 位整数(最大的 8 位整数为 255)
  4. 255.100.81.160.172 不是有效的 IPv4 地址,因为它包含 5 个整数,而不是 4 个
  5. 1..0.1 不是有效的 IPv4 地址,因为格式不正确
  6. 17.233.00.131 和 17.233.01.131 不是有效的 IPv4 地址,因为它们包含前导零

这是我的代码(我知道它是垃圾并且没有任何意义):-

bool isIPv4Address(char * inputString) {
    int count = 0, period = 0;
    int k = 0, i = 0;
    int digit = …
Run Code Online (Sandbox Code Playgroud)

c function c-strings

0
推荐指数
1
解决办法
190
查看次数