打印字符串中的数字。
假设我有这样的输入
Input: {1,32,33,41,59}
输出应该如下所示
Output: 1 32 33 41 59
我的代码是
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char input[200],words[10][10];
int length=0,i=0,j=0,k=0,t;
fgets(input,200,stdin);
//counting the length of str
while(input[length] != '\0')
{
length++;
}
for(i=1;i<=length;i++)
{
if(input[i] == ',' || input[i] == '}')
{
words[j][k] = '\0';
j++;
k=0;
}
else
{
words[j][k] = input[i];
k++;
}
}
int temp[j];
for(i=0;i<j-1;i++)
{
temp[i] = atoi(words[i]);
printf("%d\n",temp[i]);
}
return 0;
}
我的代码只打印字符串中的第一个数字。我无法弄清楚原因。
答案 0 :(得分:1)
使用j而不是j-1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char input[200],words[10][10];
int length=0,i=0,j=0,k=0,t;
fgets(input,200,stdin);
//counting the length of str
while(input[length] != '\0')
{
length++;
}
for(i=1;i<=length;i++)
{
if(input[i] == ',' || input[i] == '}')
{
words[j][k] = '\0';
j++;
k=0;
}
else
{
words[j][k] = input[i];
k++;
}
}
int temp[j];
for(i=0;i<j;i++)
{
temp[i] = atoi(words[i]);
printf("%d\n",temp[i]);
}
return 0;
}
答案 1 :(得分:1)
我对您的代码进行了一些编辑,并相信我按照您希望的方式运行它。我评论了这些变化,请看下面。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char input[200],words[10][10];
int length=0,i=0,j=0,k=0,t;
fgets(input,200,stdin);
while(input[length] != '\0')
{
length++;
}
for(i=1;i<=length;i++)
{
if(input[i] == ',' || input[i] == '}')
{
words[j][k] = '\0';
j++;
k=0;
}
else
{
words[j][k] = input[i];
k++;
}
}
int temp[j];
//Iterate through all elements in the array
//0 ---> j-1 is j elements
for(i=0;i < j ;i++)
{
temp[i] = atoi(words[i]);
//print on the same line
printf("%d ",temp[i]);
}
//newline here
printf("\n");
return 0;
}
答案 2 :(得分:0)
您的方法过于复杂,因此存在错误。
无需定义字符二维数组以输出存储在字符串数字中。从一开始就使用标准函数就足够了,例如strtoull
。
你在这里。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
enum { N = 200 };
char input[N];
while ( 1 )
{
printf( "Input: " );
if ( !fgets( input, sizeof( input ), stdin ) || input[0] == '\n') break;
for ( char *p = input; *p; )
{
if ( isdigit( ( unsigned char )*p ) )
{
char *endptr;
unsigned long long int num = strtoull( p, &endptr, 10 );
printf( "%llu\n", num );
p = endptr;
}
else
{
++p;
}
}
}
return 0;
}
程序输出可能看起来像
Input: {1,32,33,41,59}
1
32
33
41
59
Input:
答案 3 :(得分:0)
我建议你:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const char *const s = ",";
int main()
{
char input[200], *ptri, *ptr;
fgets(input, 200, stdin);
ptr = input;
while (*ptr != '{' && *ptr != '\0')
ptr++;
if (*ptr == '\0') {
return -1; /* not found */
}
ptr++;
ptri = ptr;
while (*ptr != '}' && *ptr != '\0')
ptr++;
if (*ptr == '\0') {
return -1; /* not found */
}
*ptr = '\0';
ptr = strtok(ptri, s);
while (ptr != NULL) {
printf("%s ", ptr);
ptr = strtok(NULL, s);
}
printf("\n");
return 0;
}