我已经整周都在尝试解决这个问题,现在看来我自己似乎还不明白问题出在哪里:我无法使用库函数来解决此问题,我需要手动创建所有内容,请我想念或我在哪里弄错了
给出由单词和数值组成的多行文本(char text [20] [81])。单词是字母和/或数字的连续序列,其余部分是分隔符或数字。从文本中突出显示不属于单词一部分的整个正数值。不要修改源文本。
实现并使用将字符串str中的整数写入数组编号的函数:
int getNumbers ( const char str[81], int numbers[40]);
输入数据:str-源字符串输出数据:源字符串中包含的整数数字数组返回值是整数的数量
实现并使用可识别字符串中第一个整数的函数:
int findInteger( const char str[81], char **end);
输入数据:1. str-源字符串
输出数据:
输入数据的格式。 [M] [第一行] [第二行]等。M是文本中的行数,是[1,20]范围内的整数。
输出的格式。 [第一个数字] [空格] [第二个数字]等;如果没有必需的数字,请输入消息“无解决方案”
P.S。添加具有空值的测试
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable : 4996)
int findInteger(const char str[81], char** end)
{
int i, div, j, c;
char num[81], **endc;
if ((str[0] == 0) || (str[0] == 1) || (str[0] == 2)
|| (str[0] == 3) || (str[0] == 4) || (str[0] == 5)
|| (str[0] == 6) || (str[0] == 7) || (str[0] == 8)
|| (str[0] == 9) || (str[0] == '\0') || (str[0] == ' ')
|| str[0] == '!' || str[0] == '"' || str[0] == '\''
|| str[0] == ';' || str[0] == ':' || str[0] == '?'
|| str[0] == '-' || str[0] == '.' || str[0] == ','
|| str[0] == ' ' || str[0] == '\n' )
{
div = 1;
}
else
{
div = 0;
}
for (i = 0; i < 81; i++)
{
if ((div) && ((str[i] == 0) || (str[i] == 1) || (str[i] == 2)
|| (str[i] == 3) || (str[i] == 4) || (str[i] == 5)
|| (str[i] == 6) || (str[i] == 7) || (str[i] == 8)
|| (str[i] == 9)))
{
for (j = i; j < 81; j++)
{
if ((str[j]) == 'a' || 'b' || 'c' || 'd' ||'e' ||'g'||'h'||'i'||'j'||'k'||'l'||'m'||'n'||'o'||'p'||'q'||'r'||'s'||'t'||'u'||'v'||'w'||'x'||'y'||'z')
{
j = 81;
endc = 0;
}
else
{
if (((!(str[j])) == ('a' || 'b' || 'c' || 'd' || 'e' || 'g' || 'h' || 'i' || 'j' || 'k' || 'l'
|| 'm' || 'n' || 'o' || 'p' || 'q' || 'r' || 's' || 't' || 'u' || 'v' || 'w' || 'x' || 'y' || 'z'
||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'0')) || ((j == (80)) && ((str[j] == 0) || (str[j] == 1) || (str[j] == 2)
|| (str[j] == 3) || (str[j] == 4) || (str[j] == 5)|| (str[j] == 6) || (str[j] == 7) || (str[j] == 8)
|| (str[j] == 9))))
{
for (i; i < j; i++)
{
num[i] = str[i];
*endc == &str[j];
j = 81;
}
if ((j == (80)) && ((str[j] == 0) || (str[j] == 1) || (str[j] == 2)
|| (str[j] == 3) || (str[j] == 4) || (str[j] == 5)
|| (str[j] == 6) || (str[j] == 7) || (str[j] == 8)
|| (str[j] == 9)))
{
num[j] = str[j];
endc = 0;
j = 81;
}
}
}
}
}
}
c = atoi(num);
return (c);
}
int getNumbers(const char str[81], int numbers[40])
{
int count = 0;
char tmp = '\0';
char* tmpstr = &tmp;
strcpy(tmpstr, str);
char** pEnd = &tmpstr;
int i = 0;
do
{
numbers[i] = findInteger(tmpstr, pEnd);
if (!*pEnd) { count++; }
else { i++; tmpstr = *pEnd; }
} while (*pEnd);
return count;
}
int main()
{
printf("start\n");
char digit[20][81];
char *num[81], *endc;
int M;
scanf("%d", &M);
getchar();
for (int i = 0; i < M; i++)
{
fgets(digit[i], 81, stdin);
}
int allCount = 0;
for (int i = 0; i < M; i++)
{
findInteger(digit[i] , &endc);
allCount = i++;
getNumbers(num[i], &M[&i]);
}
printf("%d", &endc);
/*if (!allCount)
{
printf("no solution\n");
}*/
return 0;
}
我一直在努力解决这个问题,现在看来我自己似乎不明白问题出在哪里:我无法使用库函数来解决这个问题,我需要手动创建所有内容,...
首先,您必须了解ASC II,检查它ASC II,它表示C中的每个字符都有一个对应的整数。例如,如果检查:
如果要让数组中的数字在功能失效后使用,必须为其提供一个指向。如果您要求将解释我将要指向的指针,但是在这段代码中,我将数字保存在数组数字中,而我只返回了数字的大小。