使用c++完成以下题目:用指针访问数组,其功能是:假定输入的字符串s中只包含字母和*,将所有的*移动到字符串的尾部
时间: 2023-03-23 19:03:25 浏览: 173
下面是用C语言实现题目要求的代码:
```c
#include <stdio.h>
#include <string.h>
void move_asterisks(char* s) {
int len = strlen(s);
int i, j = len - 1;
for (i = len - 1; i >= 0; i--) {
if (s[i] != '*') {
s[j--] = s[i];
}
}
while (j >= 0) {
s[j--] = '*';
}
}
int main() {
char s[] = "a*b**cd**e*f";
move_asterisks(s);
printf("%s\n", s);
return 0;
}
```
该代码定义了一个 `move_asterisks` 函数,将输入的字符串中所有的 `*` 移到字符串的末尾,其余字符不变。在 `main` 函数中,将字符串 "a*b**cd**e*f" 传递给 `move_asterisks` 函数,并将处理后的结果打印出来。
相关问题
用c++4. 假定输入的字符串中只包含字母和*号。请编写函数void fun(char *a),其功能是除了尾部的*号之外,将字符串中的其它的*号全部删除。 例如,字符串中的内容****A*BC*DEF*G*******。删除后,字符串中的内容应当是ABCDEFG*******。
你可以使用两个指针来解决这个问题。一个指针用于遍历字符串,另一个指针用于记录有效字符的位置。具体的实现如下:
```cpp
void fun(char *a) {
if (a == nullptr) {
return;
}
int len = strlen(a);
int validIndex = 0; // 记录有效字符的位置
for (int i = 0; i < len; i++) {
if (a[i] != '*') {
a[validIndex++] = a[i];
}
}
// 将剩余的字符设置为*
for (int i = validIndex; i < len; i++) {
a[i] = '*';
}
}
```
这个函数首先判断输入指针是否为空,然后遍历字符串,将非*字符复制到有效字符的位置,并更新有效字符的位置。最后,将剩余的字符设置为*。
用c++编写函数void transform(char *s),该函数将参数s传入的字符串中每个单词的首字符改为对应的大写字母,首字符后的字母都改为对应的小写字母,转换后的字符串仍存储在s指向的内存中。在main函数中,从键盘输入字符串,然后调用transform函数,再将转换后的字符串输出到屏幕上。(说明:假定每个单词之间除了空格没有其他符号,即不用考虑I’m之类的情况)
好的,以下是用 C++ 编写的 `transform` 函数的实现:
```c++
#include <iostream>
#include <cstring>
#include <cctype>
void transform(char *s) {
// 遍历字符串
for (int i = 0; s[i] != '\0'; i++) {
// 如果是单词的首字母
if (i == 0 || s[i-1] == ' ') {
// 转换为大写字母
s[i] = toupper(s[i]);
} else {
// 转换为小写字母
s[i] = tolower(s[i]);
}
}
}
int main() {
char s[100];
std::cout << "请输入字符串:";
std::cin.getline(s, 100);
transform(s);
std::cout << s << std::endl;
return 0;
}
```
在这个例子中,我们定义了一个名为 `transform` 的函数,该函数接受一个指向字符数组的指针 `s`,表示要转换的字符串。该函数遍历字符串,如果当前字符是单词的首字母,则将其转换为大写字母,否则将其转换为小写字母。最后,该函数将转换后的字符串存储在 `s` 指向的内存中。
在 `main` 函数中,我们首先从键盘输入字符串,并将其存储在字符数组 `s` 中。然后调用 `transform` 函数对字符串进行转换,并将转换后的字符串输出到屏幕上。
需要注意的是,我们在使用标准库函数 `getline` 从键盘输入字符串时,将字符串长度限制为 100,以避免数组越界的问题。
阅读全文
相关推荐














