首先需要将字符串转换为单独的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值,但我不知道如何检查两个连续值之间的差异以及如何耦合它们。
答案 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。