从字符串数组中查找整数,并使用创建的函数打印它

问题描述 投票:0回答:2

我已经整周都在尝试解决这个问题,现在看来我自己似乎还不明白问题出在哪里:我无法使用库函数来解决此问题,我需要手动创建所有内容,请我想念或我在哪里弄错了

给出由单词和数值组成的多行文本(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-源字符串

输出数据:

  1. end-指向整数后面的字符的指针;如果未检测到整数,则返回NULL,返回值是可识别的整数

输入数据的格式。 [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;
}

我一直在努力解决这个问题,现在看来我自己似乎不明白问题出在哪里:我无法使用库函数来解决这个问题,我需要手动创建所有内容,...

c arrays string function multidimensional-array
2个回答
1
投票

首先,您必须了解ASC II,检查它ASC II,它表示C中的每个字符都有一个对应的整数。例如,如果检查:


0
投票

如果要让数组中的数字在功能失效后使用,必须为其提供一个指向。如果您要求将解释我将要指向的指针,但是在这段代码中,我将数字保存在数组数字中,而我只返回了数字的大小。

© www.soinside.com 2019 - 2024. All rights reserved.