注册 登录
编程论坛 C语言论坛

如何在程序中输入一段文本并统计其中出现次数最多的回文数

llllc 发布于 2020-12-21 20:42, 1859 次点击
  输入一段文本,统计中间出现次数最多的回文数。回文数是类似12321,1221这样,顺序和逆序相同的十进制无符号整数,不考虑符号,长度至少为2,不能以0开始。另外,不考虑数的一部分,即abc1232abc中的232不是一个单独的数。(数据可能超过32位)
  输入数据为一段文本,可能包含若干行,直到文件末尾(EOF)为止。即只有一组测试用例。对于每一组输入数据,输出出现次数最多的回文数和它出现的次数。如果有多个,按从小到大输出,每个数占一行。如果没有, 输出None。
  比如:
  Thin34543king 121 is8 interesting121.
  I like121 thinking23.
  输出应该是:
  121 3

7 回复
#2
llllc2020-12-21 20:49
初学C语言,最好能讲一下思路 谢谢各位大佬
#3
rjsp2020-12-21 21:12
我都怀疑这不是C语言的题目,
因为没限定回文最大长度,你就得需要一个类似 std::string 的容器;
因为没限定回文最大数目, 若想高效查找字符串,你得有一个类似 std::map/hash_map 的容器。即使不要高效,你也得有个 std::vector/list 之类的容器。
#4
llllc2020-12-21 22:01
回复 3楼 rjsp
题目确实没有说回文最大长度和最大数目,如果可以的话自己设定一个可以实现吗
#5
风过无痕19892020-12-22 01:44
回复 4楼 llllc
题目还没有指明求字符的回文,还是数字的回文,那就简单点,算是求数字的回文吧:
先建立数组a[256],存放输入的字符串;
建立一个二维数组b[][20],用于存放数字字符串;
将数字从字符中分离出来,存放于二维数组里,一行一个数字字符串;
调用函数(如下),判断每一行的数字是否是回文字符串;
输出结果;

程序代码:

// 判断字符串是否为回文字符串
int huiwen(char *p)
{
    int k = 0;
    char *q;
    while (*p != NULL)
    {
        k++;             // 计算字符串长度
    }

    q = p + k;
    while (*p != '\0')
    {
        if (*p == *q)
        {
            p++;
            q--;
        }
        else
            return -1;

    }
    return 1;
}
#6
llllc2020-12-22 08:34
回复 5楼 风过无痕1989
怎么将数字从字符串中分离出来再存进二维数组里呢?
#7
apull2020-12-22 13:58
回复 6楼 llllc
遍历字符串,用isdigit判断是否数字
#8
do8do8do82020-12-23 01:29
这是读文件fopen 首先打开文件按字符读入,循环直到EOF为止
      如何处理呢
       定义一个长度超32的字符数组
       是数字的就存入数组,直到遇到非数字
       暂停判断这一串是否为回文数,如果是就把回文数存在一个指针数组内
       要么做个链表存储起来,记得此记录数要加1。
       做个结构体比较好  元素是 字符数组指针和出现次数
      清空字符数组继续读下去
       若读到再次读到回文数,就去链表查找,并在已有的回文数出现得次数加1
      如此反复
     遇到EOF关闭文件
       遍历链表输出结果
1