• 输入一个字符串,内有数字和非数字字符,例如:A123x456 17960? ,302tab5876,将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a1[1].....统计共有多少个整数,并输出这些数


    输入一个字符串,内有数字和非数字字符,例如:A123x456 17960? ,302tab5876,将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a1[1].....统计共有多少个整数,并输出这些数。

    解题思路: 遇到数字字符,则开始统计连续数字字符的个数,统计完毕后,则从右往左每次乘以10(除了个位数)作为数字的单位,最终相加得到数字;然后越过这个数字,从后边继续查找。

    答案:

    #include<stdio.h>
    #include<string.h>
    
    void count_digit(char *str)
    {
    	int digit[32], count = 0;
    	char *ptr = str;
    	int i = 0, str_len = strlen(str);
    	while (i < str_len) {
    		if (*(ptr+i) >= '0' && *(ptr+i) <= '9') {
    			int len = 1;//用于统计连续数字的个数
    			while (*(ptr + i + len) >= '0' && *(ptr + i+ len) <= '9' && (i+len) < str_len) {//找出从当前位置连续数字的个数
    				len++;
    			}
    			int sum = *(ptr + i + len - 1) - '0';//先获取个位数的数据
    			int unit = 1;//每一位的单位,从十位开始每次乘以10作为单位
    			for (int j = len - 2; j >= 0; j--) {//从右往左逐个处理
    				unit *= 10;
    				sum += (*(ptr + i + j) - '0') * unit;
    			}
    			digit[count++] = sum;
    			i += len; // i需要加上len的长度,越过这个数字,防止一个连续数字中的字符重复处理
    			continue;
    		}
    		i++;
    	}
    	for (int i = 0; i < count; i++) {
    		printf("%d ", digit[i]);
    	}
    	return;
    }
    int main()
    {
    	char buf[1024] = { 0 };
    	printf("Please enter a string with numbers:
    ");
    	gets_s(buf, 1024);
    	count_digit(buf);
    	printf("
    ");
    	system("pause");
    	return 0;
    }
    
    

    输入一个字符串,内有数字和非数字字符,例如:A123x456 17960? ,302tab5876,将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a1[1].....统计共有多少个整数,并输出这些数

  • 相关阅读:
    浅谈网络语音技术(转)
    常用的XMPP服务器
    双码流 主码流子码流(转)
    C++ 程序员必读书目清单
    Error c3876: function call missing argument list; use '' to create a pointer to member
    C#, C++, Java性能对比
    error LNK2001: unresolved external symbol __imp
    error LNK2005: _DllMain@12 already defined in MSVCRTD.lib
    【转】无缝世界网游服务器架构的设计思路
    VS2010生成exe在别的机子上运行提示“丢失MSVCR100D.dll”
  • 原文地址:https://www.cnblogs.com/weiyidedaan/p/13292930.html
Copyright © 2020-2023  润新知