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

求助 字符串展开问题

baolis 发布于 2021-11-10 21:51, 926 次点击
#include <stdio.h>
#include <stdlib.h>

/*在保存字符串时,对出现在连续位置的若干个字符,
如这些字符在ASCII表中也是连续出现,则可以将这些字符使用缩写形式进行保存,以节省保存空间。
例如用A-Z表示ABCD...XYZ,1-5表示12345,c-f表示cdef。

输入:包含缩写形式的字符串
输出:将缩写形式进行还原后的字符串
说明:只处理大小写字母和数字,即对于形如A-9,a-C这样的缩写不进行处理
*/

int main(int argc, char *argv[]) {
    static char a[1000],b[1000];
    int i,j;
    gets(a);
    for(i=0,j=0;a[i]!='\0';i++,j++){
        if(a[i]==45){
            if(((a[i-1]>=48&&a[i-1]<=57&&a[i+1]>=48&&a[i+1]<=57)||(a[i-1]>=65&&a[i-1]<=90&&a[i+1]>=65&&a[i+1]<=90)||(a[i-1]>=97&&a[i-1]<=122&&a[i+1]>=97&&a[i+1]<=122))&&(a[i-1]<a[i+1])){
                while(b[j-1]!=a[i+1]-1){
                    b[j]=b[j-1]+1;
                    j++;
                }
                i++;
            }
        }
        b[j]=a[i];   
    }
    puts(b);  

    return 0;
}
已经指针形式编写,小弟不知道咋弄了。希望大神给与帮助
2 回复
#2
diycai2021-11-11 12:36
1-2   a-b   紧邻数不处理
1-3-5       解释为12345
程序代码:
#include <conio.h>
void main()
{
    int map[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    char prev, cur, next;

    prev = 0;
    while (1)
    {
        cur = getchar();
        if (cur == '-')
        {
            next = getchar();
            if (map[prev] && map[next] && ((prev^next)<' ') && prev+1<next)
            {
                while (prev+1 < next)
                {
                    prev++;
                    printf("%c", prev);
                }
            }
            else
            {
                printf("%c", cur);
            }
            cur = next;
        }
        
        printf("%c", cur);

        if (cur == '\n')
        {
            break;
        }

        prev = cur;
    }
}
#3
baolis2021-11-11 13:01
谢谢大佬,解答
1