Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符串序列分析器_C_String_Ascii - Fatal编程技术网

C 字符串序列分析器

C 字符串序列分析器,c,string,ascii,C,String,Ascii,首先需要将字符串转换为其单独的ASCII值,然后我们必须完成以下任务: 检查两个连续的ASCII(字符串值)差值是否为1。如果差值为1 然后将它们耦合在一起并打印 #include<stdio.h> #include<string.h> int main(){ char str[100]; int i=0; printf("Enter any string: "); scanf("%s",str

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

检查两个连续的ASCII(字符串值)差值是否为1。如果差值为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;
    }
前。 ABCD 单个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;
    }
#包括
#包括
int main(){
char-str[100];
int i=0;
printf(“输入任何字符串:”);
scanf(“%s”,str);
printf(“给定字符串的每个字符的ASCII值:”);
while(str[i])
printf(“%d”,str[i++]);
返回0;
}

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

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

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

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

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


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

我认为解决问题的最简单方法是在你读了字符串之后,创建一个指向它的指针,然后通过字符串检查前进一个指针,其中
*pointer-*(pointer-1)==1
。对
指针值>字符串[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;
}
当然,您可以以任何喜欢的方式重新格式化输出,但出于说明目的,这很好地确认了character->unsigned int值。

\include
#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;
}
int main(){ 字符str[100]=“”; int i,最后; printf(“输入任何字符串:”); scanf(“%s”,str+1);//top是dummy printf(“给定字符串的每个字符的ASCII值:”); i=1; while(str[i]) printf(“%d”,str[i++]); printf(“\n”); last=i;
对于(i=1;我只是减去这些值!我不知道什么是耦合…ABCD应该打印abbcd?@nightshade ex。输入是ACBE,下面的ASCII值是65 67 66 69。所以两个连续的值,即A和C的差不是1,C和B的差是1,所以它们将打印为CB,B和e的差不是1,所以ACBE的结果是CB。所以它们是耦合的。i un理解ascii值部分,我只是不知道我“耦合在一起”ABCD有什么:B-A==1(打印AB?);C-B==1(打印BC?);D-C==1(打印CD?);@nightshade噢明白你的意思了。这次看另一个例子,你会明白的。ABCDH.A-B=1,B-C=1,C-D=1,但D-H不是1,所以输出是ABCD。我们将迭代直到差值为1,然后打印该部分。因此,当满足条件时,ABCD是耦合的(差值=1).为什么在for循环中
i=1
而不是
i=0
?@chouaib,这样做时不需要对第一个字符进行特殊处理,因此简化了过程。