如何在C中的用户输入字符串中加倍浮点数/整数?

时间:2016-01-23 20:25:51

标签: c

我提前抱歉,因为我对编程很新,而且我的代码中的某些内容可能看起来完全是胡说八道!我不完全确定我是否正确使用atoi

我尝试创建一个程序,将用户输入句子拆分为单个单词,如果用户输入一个,则将数字加倍(浮点数/整数)。 例如,I have 3 cats将显示为:

I
have
6
cats

我的程序现在能够分割句子,但我不能将整数加倍。任何人都可以帮我这个吗?

以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
    char sentence[100];

    printf("Enter a sentence to split: ");
    scanf("%[^\n]s", sentence);
    char *pch;
    int y;

    y = atoi(sentence);
    printf("After splitting:\n", sentence);
    pch = strtok(sentence," ");
    while (pch != NULL) {
        printf("%s\n", pch);
        pch = strtok(NULL, " ");
    }
    system("PAUSE");
}

到目前为止我的输出:

Enter a sentence to split: Hi, I have 7 cats.
After splitting:
Hi,
I
have
7
cats.
Press any key to continue . . .

4 个答案:

答案 0 :(得分:1)

这是一个更简单的版本,测试所有数字:

SET PATH=%PATH%;c:\the\location

python file_name.py

pause

如果您也想解析浮点数,可以使用以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
     char sentence[100];
     char *pch;

     printf("Enter a sentence to split: ");
     if (!fgets(sentence, sizeof sentence, stdin))
          return 1;

     printf("After splitting:\n");
     for (pch = strtok(sentence, " \n"); pch != NULL; pch = strtok(NULL, " \n")) {
         if (pch[strspn(pch, "0123456789")] == '\0') {
             printf("%d\n", atoi(pch) * 2);
         } else {
             printf("%s\n", pch);
         }
     }
     system("PAUSE");
     return 0;
}

请注意#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main(void) { char sentence[100]; char *pch, *pend; double value; printf("Enter a sentence to split: "); if (!fgets(sentence, sizeof sentence, stdin)) return 1; printf("After splitting:\n"); for (pch = strtok(sentence, " \n"); pch != NULL; pch = strtok(NULL, " \n")) { value = strtod(pch, &pend); if (*pend == '\0' && isfinite(value)) { printf("%g\n", value * 2); } else { printf("%s\n", pch); } } system("PAUSE"); return 0; } 的测试,以避免将isfinite()inf识别为数字。

注意:nan是C99的一部分,VisualStudio 12不支持它,但更新的版本支持它。对于此旧版本,请使用isfinite中定义的_finite()

答案 1 :(得分:0)

对于拆分部分我会推荐这个版本,它更容易理解(考虑到你已经学会了for工作方式)。它做同样的事情,但可以帮助您组织代码。

char *p;
int i;
    for(p = strtok(sentence, " "); p != NULL; p = strtok(NULL, " "))
    {
        int isNumber = 1;
        for(i = 0; i < strlen(p); i ++)
        {
            if(!isDigit(p[i])
            {
                isNumber = 0;
                break;
            }
        }
        if(isNumber == 1)
        {
            int number = atoi(pch);
            number *= 2;
            printf("%d\n", number);
        }
        else
        {
            printf("%s\n", p);
        }
    }

对于这个号码,我建议使用atoi功能。 Here你有一个很好的参考。

要解决您的问题,首先,您需要检查您获得的每个单词。例如:你逐字逐句地看待&#34;字&#34;仅包含数字。如果它只包含数字,您可以使用atoi将其转换为数字,将其乘以2并打印结果。

另一方面,如果你发现一个不是数字的字符,你的单词中有字母或任何其他字符,所以它不是一个字,所以你只需按原样打印它。

答案 2 :(得分:0)

这是一个有效的例子,即使它不是很精确。基本上,我们需要确定我们当前的字符串是否为数字。在这种情况下,我只是尝试获取当前字符串的第一个元素,并尝试确定它是否为数字。

当然,如果你想确实肯定,我们需要迭代字符串并检查每个字符,如果它是一个数字。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
    char sentence[100];

    printf("Enter a sentence to split: ");
    scanf("%[^\n]s", sentence);
    char * pch;
    int y;
    y = atoi(sentence);
    printf("After splitting:\n", sentence);
    pch = strtok (sentence," ");
    while (pch != NULL)
    {
        if(isdigit(pch[0]))
        {
            int number = atoi(pch);
            number *=2;
            printf("%d\n",number);
            pch = strtok (NULL, " ");
            continue;
        }
        printf("%s\n",pch);
        pch = strtok (NULL, " ");
    }

    system("PAUSE");
}

答案 3 :(得分:0)

这是另一个(更紧凑的)答案:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int is_numeric(char *s)
{
    int i = 0;
    while (s[i] != '\0') {
        if (!isdigit(s[i]))
            return 0;
        ++i;
    }
    return 1;
}

int main()
{
    char sentence[255];
    char *pch;

    printf("Enter a sentence to split: ");
    if (!fgets(sentence, sizeof(sentence), stdin)) {
        return 1;
    }
    sentence[strcspn(sentence, "\n\r")] = 0; /* Strip newline */

    pch = strtok(sentence, " ");
    while (pch != NULL) {
        if (atoi(pch)) {
            printf("%d\n", 2 * atoi(pch));
        } else {
            printf("%s\n", pch);
        }
        pch = strtok(NULL, " ");
    }
    return 0;
    /* system("PAUSE"); */
}

关键是atoi将返回0表示非数字参数。