哈工大 sse 困难

Q500.(10分数, 语言: C)利用指针能直接操作内存的特点来编程输出字符串中每个字符在内存中的存储编码(字符串中可以包含英文数字和汉字)。 

程序的运行示例1如下: 请输入一个字符串,长度小于等于100:abcABC012中国人 
该字符串的内存编码为: 61 62 63 41 42 43 30 31 32 d6 d0 b9 fa c8 cb 
程序的运行示例2如下: 请输入一个字符串,长度小于等于100:12345上山打老虎 
该字符串的内存编码为: 31 32 33 34 35 c9 cf c9 bd b4 f2 c0 cf bb a2 

提示: 输出格式用"%x " 
提示:为了不输出多余的ffff, 请用printf("%x ", (unsigned char)str[i] & 0xff); 
或者 if (str[i] > 0xffffff00) printf("%x ", str[i] -0xffffff00);
#include <stdio.h>
#include <string.h>
#define N 100

void main(){
    char str[101] = {'\0'};
    char *p1,*p2;
    printf("请输入一个字符串,长度小于等于100:");
    scanf("%s",str);

    p1 = (char *)(str + strlen(str));
    p2 = (char *)str;

    printf("该字符串的内存编码为: ");
    while(p1 > p2){
        printf("%x ",(unsigned char)*p2 & 0xff);
        p2++;
    }
    return 0;
    
}
Q1317.(10分数, 语言: C)写一个函数,输入一行字符,将此字符串中最长的单词输出。
输入提示信息:"输入一行文本:\n"
用gets()输入一行字符
输出提示信息:"\n最长的单词是:"
输出字符用"%c"
输出所有字符后用"\n"
程序的运行示例如下:
输入一行文本:I am a student.

最长的单词是:student
#include <stdio.h>
#include <string.h>
#define N  80
void main()
{
    char str[N];
    char s[N][N] = {'\0'};
    printf("输入一行文本:\n");
    gets(str);
    int j = 0, k = 0;

    for (int i = 0; str[i] != '\0'; i++)
    {

        if (str[i] != ' '&&((str[i]>='a'&&str[i]<='z')||str[i]>='A'&&str[i]<='Z'))
        {
            s[k][j++] = str[i];
        }
        else 
        {
            s[k][j] = '\0';
            k++;
            j = 0;
        }
    }


    int maxpos = 0, max = 0;
    for (int i = 0; i <= k; i++)
    {
        if (strlen(s[i]) > max)
        {
            max = strlen(s[i]);
            maxpos = i;
        }
    }

    printf("\n最长的单词是:");
    for (int i = 0; s[maxpos][i] != '\0'; i++)
    {
        printf("%c", s[maxpos][i]);
    }
    printf("\n");
}
Q2330.(10分数, 语言: C)输入一个英文句子(输入句子以回车作为结束,句子长度包括标点符号并且不超过20),翻转句子中单词的顺序,但单词内字符的顺序不变。标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出“student.a am I”
输入提示信息:Input Sentence:
输出提示信息:Output Reverse Sentence:
#include <stdio.h>
#include <string.h>
#define N  80
void main()
{
    char str[N];
    char s[N][N] = {'\0'};
    printf("Input Sentence:");
    gets(str);
    int j = 0, k = 0;

    for (int i = 0; str[i] != '\0'; i++)
    {

        if (str[i] != ' ')
        {
            s[k][j++] = str[i];
        }
        else 
        {
            s[k][j] = '\0';
            k++;
            j = 0;
        }
    }

    printf("Output Reverse Sentence:");
    for (int i = k; i>=0; i--)
    {
        if(i==0){
            printf("%s", s[i]);
        }else{
            printf("%s ", s[i]);
        }
        
    }
    printf("\n");
}

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值