我想将字符串转换为整数。但是我的字符串是234,23,34,45。如果我使用atoi,它只给我234.I想转换我的字符串中的所有整数。我怎么能用atoi来解决这个问题或者我可以用什么代替atoi?
答案 0 :(得分:4)
一种选择是使用strtok()将你的字符串分成几部分,然后在每一部分上使用atoi()。
修改(dmckee在评论中推荐)
答案 1 :(得分:1)
因为字符串只是一个字符* *在每次调用atoi到','+ 1
的下一个实例之后前进一个临时字符*答案 2 :(得分:1)
假设你想要{234,23,34,45}。
使用strchr
#include <string.h>
void print_nums(char *s)
{
char *p;
for (p = s; p != NULL; p = strchr(p, ','), p = (p == NULL)? NULL: p+1) {
int i = atoi(p);
printf("%d\n", i); /* or whatever you want to do with each number */
}
}
或者更容易阅读:
void print_nums(char *s)
{
char *p = s; /* p always points to the first character of a number */
while (1) {
int i = atoi(p);
printf("%d\n", i); /* or whatever you want to do with each number */
p = strchr(p, ','); /* find the next comma */
if (p == NULL)
break; /* no more commas, end of string */
else
p++; /* skip over the comma */
}
}
使用strtok
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void print_nums(const char *str)
{
char *tempstr = strdup(str);
char *p = NULL;
const char *delim = ",";
for (p = strtok(tempstr, delim); p != NULL; p = strtok(NULL, delim)) {
int i = atoi(p);
printf("%d\n", i); /* or whatever you want to do with each number */
}
if (tempstr != NULL) {
free(tempstr);
tempstr = NULL;
}
}
答案 3 :(得分:0)
您可以解析字符串并将其拆分为“,”然后将范围传递给atoi()。
答案 4 :(得分:0)
为什么不首先规范化字符串?
这是一个(未经测试的)功能。
#include <ctype.h>
#include <string.h>
/*
* remove non-digits from a string
*
* caller must free returned string
*/
char *normalize(char *s)
{
int i, j, l;
char *t;
l = strlen(s);
t = malloc(l+1);
for (i = 0, j = 0; i < l; i++) {
if (isdigit(s[i]))
t[j++] = s[i];
}
t[j] = '\0';
return t;
}
然后代替
int intvalue = atoi(numstring);
这样做
char *normalized = normalize(numstring);
int intvalue = atoi(normalized);
答案 5 :(得分:0)
int my_atoi(const char * str) {
if (!str)
return 0; // or any other value you want
int str_len = strlen(str);
char *num_str = (char *)malloc(str_len * sizeof(char));
int index = 0;
for (int i = 0; i < str_len; ++i) {
char ch = str[i];
if (ch == 0) {
num_str[index] = 0;
break;
}
if (isdigit(ch))
num_str[index++] = ch;
}
num_str[index] = 0;
int ret = atoi((const char *)num_str);
free(num_str);
return ret;
}
然后调用my_atoi(const char *)
函数:
char *str = "234,23";
int v = my_atoi(str);