字符序列分析器

时间:2014-06-24 06:28:50

标签: c string ascii

首先需要将字符串转换为单独的ASCII值,然后我们必须完成以下任务:

检查两个连续的ASCII(字符串的值)差异是否为1。如果差异是1 然后它们将被连接在一起并打印出来。

离。 A B C D 个别ASCII值:65 67 68 69 两个连续ASCII值的差值为1,因此将它们连接在一起然后打印出来。

#include<stdio.h>
#include<string.h>

    int main(){

        char str[100];
        int i=0;

        printf("Enter any string: ");
        scanf("%s",str);

        printf("ASCII values of each characters of given string: ");
        while(str[i])
             printf("%d ",str[i++]);



        return 0;
    }

此代码打印ASCII值,但我不知道如何检查两个连续值之间的差异以及如何耦合它们。

3 个答案:

答案 0 :(得分:1)

#include<stdio.h>

int main(){

    char str[100]="";
    int i, last;

    printf("Enter any string: ");
    scanf("%s",str+1);//top is dummy

    printf("ASCII values of each characters of given string: ");
    i = 1;
    while(str[i])
         printf("%d ",str[i++]);
    printf("\n");

    last = i;
    for(i=1;i<last;++i){
        if(str[i] == str[i-1] + 1 || str[i] == str[i-1] - 1 || 
           str[i] == str[i+1] + 1 || str[i] == str[i+1] - 1)
            printf("%c", str[i]);
    }
    printf("\n");

    return 0;
}

答案 1 :(得分:0)

好的是给你一个线索,而不是解决你的问题:

由于char是C中的整数类型,请执行以下操作:

if( 'B' - 'A' == 1){
    printf("OK\n");
}

if( 'C' - 'A' == 2){
    printf("OK\n");
} //etc

(在ideone上)

想想你应该在循环中改变什么,我想你会明白:)

答案 2 :(得分:0)

我认为在读取字符串之后,最容易解决问题的方法是创建一个指向它的指针,然后只需通过字符串检查指针*pointer - *(pointer - 1) == 1。为pointer values > string[0]执行此操作,您可以检查两个相邻字符是否已耦合。 (你需要差异的绝对值)。快速破解你的解决方案看起来像这样:

#include<stdio.h>
#include<string.h>

int absdiff (unsigned a, unsigned b) {
    if (a == b) return 0;
    return (a > b) ? a - b : b -a;
}

int main(){

    char str[100];
    char cpl[3];
    cpl[2]='\0'; // null terminate cpl
    //int i=0;

    printf("Enter any string: ");
    scanf("%s",str);

    printf("ASCII values of each characters of given string: \n");
    char *ptr = str;
    while(*ptr) {
         if ((ptr - str) > 0) {
            if (absdiff (*ptr, *(ptr - 1)) == 1) {
                cpl[0] = *(ptr - 1);
                cpl[1] = *ptr;
                printf ("  coupled : %s\n", cpl);
                ptr++;
                continue;
            }
         }
         printf("  %c  =  %u\n",*ptr, *ptr);
         ptr++;
    }
    putchar ('\n');
    return 0;
}

如果给出字符串'my_dog_is_unable_to_bark。'会产生以下输出:

Enter any string: my_dog_is_unable_to_bark.

ASCII values of each characters of given string:
m  =  109
y  =  121
_  =  95
d  =  100
o  =  111
g  =  103
_  =  95
i  =  105
s  =  115
_  =  95
u  =  117
n  =  110
a  =  97
coupled : ab
l  =  108
e  =  101
_  =  95
t  =  116
o  =  111
_  =  95
b  =  98
coupled : ba
r  =  114
k  =  107
.  =  46

当然,您可以以任何您喜欢的方式重新格式化输出,但出于说明的目的,这可以很好地确认角色 - &gt; unsigned int values。