gpt4 book ai didi

c - strtok 不只在指定的分隔符上标记

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:04 25 4
gpt4 key购买 nike

所以我是 C 的新手,正在自学字符串处理。据我所知,我的问题是我标记 sp 的函数?输入的数字串不仅在空格上 split 。例如:如果我输入一个像 45 这样的数字,我的数组中的结果字符串将同时显示 45 和 5,因此在两位数字中,无论出于何种原因,它都会拆分数字。我进行了长时间的搜索,但没有任何运气。

希望这不是我刚刚忽略的明显错误。但是我已经到了无法继续学习的地步,因此非常感谢您的帮助!

示例输出:

please enter your string: 1 45 30 82
converting strings to ints
Printing the string
1, 0, 45, 5, 0, 30, 0, 0, 82, 2,
Press any key to continue . . .

我的代码:

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

#define STRING_LENGTH 81
#define MAX_TOKENS 40

int StrInput( char dataStr[]);
void atoiWorker( char dataStr[], char results[], int idx);
void printer ( char dataStr[], int idx);
void tokenize ( char dataStr[], char results[]);

int main()
{
int idx;
char dataStr[STRING_LENGTH];
char results[STRING_LENGTH];
idx = StrInput(dataStr);
tokenize(dataStr, results);
atoiWorker(dataStr, results, idx);
printer(results, idx);
}

int StrInput(char dataStr[])
{
int idx = 0;
printf( "please enter your string: " );
while (idx < (STRING_LENGTH) && ((dataStr[idx] = getchar()) != '\n'))
idx++;

dataStr[idx] = '\0';
return idx;
}

void atoiWorker( char dataStr[], char results[], int idx)
{
int i;
printf( "converting strings to ints\n" );
for (i = 0; i < idx; i++)
results[i] = atoi(&dataStr[i]);
}

void tokenize(char dataStr[], char *results[])
{
int count = 0;
char delim[] = " ,\t\n"; //found this on msdn, hopefully it's right

if (results[0] = strtok(dataStr, " \t"))
count++;

while (results[count] = strtok(NULL, delim/*" \t"*/))
count++;
}

void printer(char dataStr[], int idx)
{
int i;
printf( "Printing the string\n" );
for (i = 0; i < idx; i++)
printf( " %d,", dataStr[i] );
printf( "\n" );
}

最佳答案

tokenize() 中设置 results[] 之后,您可以在 atioWorker() 中覆盖它。

关于c - strtok 不只在指定的分隔符上标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com