c - 使用 atoi 将 char 标记化字符串为 int

标签 c char token tokenize atoi

我正在尝试获取用户输入:(1 345 44 23) 并将其转换为标记化的字符字符串,然后转换为整数。令人惊讶的是,对于我认为是一项常见任务的任务,我找不到太多帮助。

有什么想法如何使用标记将 char 字符串转换为 in 字符串吗?

我的程序在进行转换时崩溃(在标记化之后[我意识到这不是一个单词])。

谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define StrSZE 81


void strInput (char str[], int maxChars);
void custatoi(char * tokenArray[], int * data, int numOfTok);


int main(int argc, char *argv[])
{
    char str[StrSZE];
    char* tokenArray;
    int maxChars=StrSZE-1, cont=1, numOfToken=0, i=0;
    int* data;


    strInput(str, maxChars);


    tokenArray = strtok(str, " \t");
    while (tokenArray)
    {
        printf("token: %s\n", tokenArray);
        tokenArray = strtok(NULL, " \t");
        numOfToken++;
    }


    data = (int *) malloc(numOfToken * sizeof(int));

    custatoi(tokenArray, data, numOfToken);

    system("PAUSE");
    return 0;
}



void strInput (char str[], int maxChars)
{
    char garbage;
    int k=0;

    str[0]='\0';

    printf("Please type a string of whole numbers (intigers).\n\n");

    while ((k<80) && ((str[k] = getchar()) != '\n'))
        k++;

    /* Clears the keyboard buffer.  */
    if (k==80)
        while((garbage = getchar()) != '\n')
            ;

    /* Place null at the end of the line read in from user */
    str[k]='\0';

    printf("str after input is: %s\n\n", str);
}


void custatoi(char * tokenArray[], int * data, int numOfTok)
{
    int i;

    for (i=0; i < numOfTok; i++)
        data[i] = atoi(tokenArray[i]);
}

最佳答案

我更正了您代码中的错误:main() 中存在一些错误,tokenArray 数据类型不正确。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define StrSZE 81


void strInput (char str[], int maxChars);
void custatoi(char*  tokenArray[], int * data, int numOfTok);


int main(int argc, char *argv[])
{
    char str[StrSZE];


    int maxChars=StrSZE-1, cont=1, numOfToken=0, i=0;
    int* data;
    char* tokenArray[50];    // Declared correctly 

    strInput(str, maxChars);


    tokenArray[i] = strtok(str, " \t");   // Also made a change here!
    while (tokenArray[i])
    {
        printf("token: %s\n", tokenArray[i]);
        i++;
        tokenArray[i] = strtok(NULL, " \t");
        numOfToken++;
    }


    data = (int *) malloc(numOfToken * sizeof(int));

    custatoi(tokenArray, data, numOfToken);

    printf("data\n");
    for(i=0;i<numOfToken;i++){
        printf(" %d\n",data[i]);

    }

    system("PAUSE");
    return 0;
}



void strInput (char str[], int maxChars)
{
    char garbage;
    int k=0;

    str[0]='\0';

    printf("Please type a string of whole numbers (intigers).\n\n");

    while ((k<80) && ((str[k] = getchar()) != '\n'))
        k++;

    /* Clears the keyboard buffer.  */
    if (k==80)
        while((garbage = getchar()) != '\n')
            ;

    /* Place null at the end of the line read in from user */
    str[k]='\0';

    printf("str after input is: %s\n\n", str);
}


void custatoi(char*  tokenArray[], int * data, int numOfTok)
{
    int i;

    for (i=0; i < numOfTok; i++)
        data[i] = atoi(tokenArray[i]);
}

关于c - 使用 atoi 将 char 标记化字符串为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13024450/

相关文章:

JavaCC 识别 token 中的 token

c - c程序的段错误

C 将字符数组打印为浮点型

C-如何将文本文件中的单词读入字符串数组

java - 为什么我的 char 打印为数字而不是字符?

mysql - 使用 CHAR(6) 表示年+月字段是个坏主意吗?

c# - 如何在不复制的情况下从 char 数组创建字符串?

c - Windows 上的 fchown() 似乎无法在 C 中实现

.net - 如何使用 .Net 的 RegEx 从字符串中提取所有 {} 标记?

command-line - 如何在特定标记后搜索和替换空行?