假设有一字符串 STR,试编写一个程序查找 STR 字符串中第一个非空格字符的位置,如 果找到则将字符位置保存在字节变量 POS1 中,如果没有找到则将 0FFH 保存至 POS1 中。
时间: 2024-02-19 16:57:33 浏览: 30
我已经在之前的回答中给出了这个问题的汇编代码。这里再给出一遍供参考:
```assembly
MOV CX, 0 ; 将计数器 CX 初始化为 0
MOV SI, 0 ; 将字符串下标 SI 初始化为 0
MOV AL, ' ' ; 将 AL 寄存器初始化为空格字符
MOV POS1, 0FFH ; 将 POS1 初始化为 0FFH
LOOP1:
CMP SI, STR_LEN ; 比较字符串下标 SI 是否超过字符串长度
JAE FINISH ; 如果超过,跳转到结束标签
MOV BL, BYTE PTR [SI + STR] ; 将字符串中的一个字节读入 BL 寄存器
CMP BL, ' ' ; 比较 BL 寄存器中的字节是否为空格字符
JE NEXT ; 如果是,跳转到下一次循环
MOV POS1, SI ; 如果不是,将字符串下标保存在 POS1 变量中
JMP FINISH ; 跳转到结束标签
NEXT:
INC SI ; 下标加一
INC CX ; 计数器加一
JMP LOOP1 ; 跳转到 LOOP1 标签
FINISH:
```
相关问题
在c语言中,编写一个程序,输入一个字符串str和一个字符ch,通过指针查找,统计字符串str中ch出现的位置
下面是一个实现该功能的C语言程序:
```c
#include <stdio.h>
#include <string.h>
void find_char(const char *str, char ch, int *pos, int *count) {
int len = strlen(str);
*count = 0;
for (int i = 0; i < len; i++) {
if (str[i] == ch) {
pos[*count] = i;
(*count)++;
}
}
}
int main() {
char str[100];
char ch;
int pos[100];
int count = 0;
printf("请输入一个字符串:");
scanf("%s", str);
printf("请输入要查找的字符:");
scanf(" %c", &ch);
find_char(str, ch, pos, &count);
if (count == 0) {
printf("字符串中未找到该字符。\n");
} else {
printf("该字符在字符串中出现了%d次,位置分别为:\n", count);
for (int i = 0; i < count; i++) {
printf("%d ", pos[i]);
}
printf("\n");
}
return 0;
}
```
在程序中,我们定义了一个`find_char`函数,它接收一个字符串、一个字符、一个位置数组和一个计数器指针作为输入,通过指针查找字符串中指定字符的位置,并将位置存储在位置数组中,最后更新计数器指针的值为该字符在字符串中出现的次数。
在`main`函数中,我们先读入一个字符串和一个字符,然后调用`find_char`函数查找该字符在字符串中的位置,最后输出结果。
需要注意的是,在调用`scanf`函数读入字符时,我们需要在前面加上一个空格,以消耗掉之前输入时留下的换行符或空格。
删除一个字符串str,在输入要删除字符c(非空格字符),大小写不区分,将字符串str中出现的所有字符c删除
要删除一个字符串中出现的所有字符 c,可以使用字符串的替换方法。首先,将字符串 str 中的所有字符转换为小写或大写,然后使用替换方法将字符 c 替换为空字符串。
以下是一个示例代码:
```python
def delete_char(str, c):
str = str.lower() # 将字符串转换为小写
c = c.lower() # 将字符 c 转换为小写
return str.replace(c, '') # 使用替换方法删除字符 c
# 测试代码
str = "Hello, World!"
c = "o"
result = delete_char(str, c)
print(result) # 输出: Hell, Wrld!
```