使用c++完成以下题目:用指针访问数组,其功能是:假定输入的字符串s中只包含字母和*,将所有的*移动到字符串的尾部
时间: 2023-03-23 16:03:25 浏览: 164
下面是用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++中char类型数组如何忽略输入中的所有空格
在C++中,如果你想要读取一个字符数组并忽略其中的所有空格,可以使用`std::getline`函数配合循环来实现。这里有一个简单的例子:
```cpp
#include <iostream>
#include <sstream>
void ignoreSpaces(char* arr, int& size) {
std::istringstream iss(std::string(arr)); // 使用istringstream将字符串转换成流
std::string token;
while (iss >> token) { // 逐个读取非空格字符
if (!isspace(token[0])) { // 检查第一个字符是否为空格
*arr = token[0]; // 如果不是,将其复制到数组中
arr++; // 移动指针到下一个位置
}
if (token != "") { // 只有当读取到非空串时才增加大小
size++;
}
}
*arr = '\0'; // 结束数组(添加终止符'\0')
}
int main() {
char inputArr[100];
int size = 0;
std::cout << "Enter a string with spaces: ";
std::cin.getline(inputArr, sizeof(inputArr));
ignoreSpaces(inputArr, size); // 调用函数处理
std::cout << "Processed string: ";
for (int i = 0; i < size; i++) {
std::cout << inputArr[i];
}
return 0;
}
```
在这个例子中,`ignoreSpaces`函数会跳过连续的空格并将非空格字符放入数组中,直到遇到换行符。注意,这个程序假定输入不会超过数组的长度限制。
阅读全文