打印字符串

时间:2018-04-14 15:16:19

标签: c string loops for-loop integer

打印字符串中的数字。

假设我有这样的输入

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;
}

我的代码只打印字符串中的第一个数字。我无法弄清楚原因。

4 个答案:

答案 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;
}