发布网友 发布时间:2024-10-24 02:56
共3个回答
热心网友 时间:2024-10-27 13:34
字符也可以使用整数来表示,其实整数0-255用%c来输出就是字符。
#include <stdio.h>
int main() {
char s[256]; /*初始化了一个数组来存放输入的串*/
int i = 0, tmp[256] = {0}; /*tmp是一个256个整型数组,初始化成全0*/
printf("Enter the string :\n");
gets(s); /*将输入的串存到s中*/
/*分析每个输入的字符,如果字符是'a' 则a=97,那么 tmp[97]将置成1 ,如果下一个字符串还是
'a',那么同样tmp[97]置成1,如果下一个字符是'b',那么tmp[98]将置成1......*/
while(s[i] != '\0')
tmp[s[i++]] = 1;
puts("\nAfter sort and delete operation:");
/*顺序输出255个字符中s串中包含的字符*/
for(i = 0; i < 256;i++)
if(tmp[i])
printf("%c", i);
return 0;
}
那么等于是说全部ascii字符集是256个,如果有哪个字符那么就把它标记上,然后再从0开始顺序输出就可以了。
热心网友 时间:2024-10-27 13:27
这个程序呢...怎么说呢...它并不是把重复的字符删了...只是在最后输出的时候仅输出一次而已,而且最后输出是是按顺序排序过的.
对C语言来说,字符也是数字,是取值0~255的数字.所以它构造了一个长度为256的tmp数组.
tmp[s[i++]]=1就是取s字符串的第i个字符s[i],它也是个数字,对应tmp数组中的tmp[s[i]],令其为1,表示s[i]字符出现过一次了,然后再让i+1.
那么for(i = 0; i < 256;i++) 就好理解了,就是看长度为256的tmp数组中那些是1,是1的就代表着该字符出现过,那么只要把i当作字符打出来即可.
热心网友 时间:2024-10-27 13:27
每一个字符都会对应一个asc码,你可以试着将一个字母用整型输出,就会得到一个数,那就是它的asc码。这个程序里的tmp[s[i++]],就是将字符元素s[i++]的asc码作为tmp数组的序号,如果 s[1]和s[2]都是同一个字母的话,那他们的asc码就是同一个数,假设就是23吧,那就容易看出本来是两个元素,但对应tmp数组时,就都是tmp[23],再结合输出部分的形式 if(tmp[i]) printf("%c", i); 就达到了去除重复的目的了,这里你应该能看出,一个字符对应一个asc码(就是数字),一个数字(一定范围内的)当然也就对应一个字符,最后的输出部分printf("%c", i); 正是将asc码再重新转回字符输出。至于 for(i = 0; i < 256;i++) ,那就是一个一个地输出嘛。这个程序其实不仅能去除重复的字母,而且还能对剩下的字母进行排序,你看那句话 puts("\nAfter sort and delete operation:"); 不就说地很清楚吗,“经过排序和删除后”。其中原理你如果懂我上面所说的话,也就不难理解了。最后我想说这个程序还是很巧妙的,谢谢你的分享。
热心网友 时间:2024-10-27 13:33
字符也可以使用整数来表示,其实整数0-255用%c来输出就是字符。
#include <stdio.h>
int main() {
char s[256]; /*初始化了一个数组来存放输入的串*/
int i = 0, tmp[256] = {0}; /*tmp是一个256个整型数组,初始化成全0*/
printf("Enter the string :\n");
gets(s); /*将输入的串存到s中*/
/*分析每个输入的字符,如果字符是'a' 则a=97,那么 tmp[97]将置成1 ,如果下一个字符串还是
'a',那么同样tmp[97]置成1,如果下一个字符是'b',那么tmp[98]将置成1......*/
while(s[i] != '\0')
tmp[s[i++]] = 1;
puts("\nAfter sort and delete operation:");
/*顺序输出255个字符中s串中包含的字符*/
for(i = 0; i < 256;i++)
if(tmp[i])
printf("%c", i);
return 0;
}
那么等于是说全部ascii字符集是256个,如果有哪个字符那么就把它标记上,然后再从0开始顺序输出就可以了。
热心网友 时间:2024-10-27 13:35
这个程序呢...怎么说呢...它并不是把重复的字符删了...只是在最后输出的时候仅输出一次而已,而且最后输出是是按顺序排序过的.
对C语言来说,字符也是数字,是取值0~255的数字.所以它构造了一个长度为256的tmp数组.
tmp[s[i++]]=1就是取s字符串的第i个字符s[i],它也是个数字,对应tmp数组中的tmp[s[i]],令其为1,表示s[i]字符出现过一次了,然后再让i+1.
那么for(i = 0; i < 256;i++) 就好理解了,就是看长度为256的tmp数组中那些是1,是1的就代表着该字符出现过,那么只要把i当作字符打出来即可.
热心网友 时间:2024-10-27 13:29
每一个字符都会对应一个asc码,你可以试着将一个字母用整型输出,就会得到一个数,那就是它的asc码。这个程序里的tmp[s[i++]],就是将字符元素s[i++]的asc码作为tmp数组的序号,如果 s[1]和s[2]都是同一个字母的话,那他们的asc码就是同一个数,假设就是23吧,那就容易看出本来是两个元素,但对应tmp数组时,就都是tmp[23],再结合输出部分的形式 if(tmp[i]) printf("%c", i); 就达到了去除重复的目的了,这里你应该能看出,一个字符对应一个asc码(就是数字),一个数字(一定范围内的)当然也就对应一个字符,最后的输出部分printf("%c", i); 正是将asc码再重新转回字符输出。至于 for(i = 0; i < 256;i++) ,那就是一个一个地输出嘛。这个程序其实不仅能去除重复的字母,而且还能对剩下的字母进行排序,你看那句话 puts("\nAfter sort and delete operation:"); 不就说地很清楚吗,“经过排序和删除后”。其中原理你如果懂我上面所说的话,也就不难理解了。最后我想说这个程序还是很巧妙的,谢谢你的分享。