所以我是C的新手,并且在自学字符串处理。就我所能说的而言,我的问题是我的函数标记sp?输入的数字串不仅在空间上劈开。例如:如果我输入的数字是45,那么数组中的结果字符串将显示45和5,所以在两位数字中,无论出于何种原因,它都会分割数字。我搜查了很长时间,但没有任何运气。strtok只在指定的分隔符上不能标记
希望这不是一个明显的错误,我只是俯瞰。但是我已经达到了无法继续学习的地步,所以我们不胜感激!
输出示例:
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");
}
显示的完整代码。 – 2013-04-22 23:48:16
这段代码如何编译? “结果”的实际类型是什么?您正在将整数,字符指针和字符分配给它在不同位置的元素。 – perreal 2013-04-22 23:53:30
它当然不能编译,因为'tokenize'的两个签名不匹配。 – 2013-04-23 01:05:36