【发布时间】:2018-09-16 21:27:41
【问题描述】:
我目前正在开发一个小程序,需要一个函数返回一个字符串(字符数组),两个参数分别是(phrase,c)。 “短语”是一个字符串输入,“c”是将从短语中删除的字符。剩余的空格也将被删除。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//This method has two parameters: (str, c)
//It will remove all occurences of var 'c'
//inside of 'str'
char * rmchr(char * str, char *c) {
//Declare result array
char *strVal = (char *) malloc(sizeof(char) * strlen(str));
//Iterate through each character
for (int i = 0; i < strlen(str); i++) {
*(strVal+i) = str[i];
//Check if char matches 'c'
if (strVal[i] != *c){
//Assign filtered value to new array
*(strVal+i) = str[i];
printf("%c", strVal[i]);
}
}
return strVal;
}
int main()
{
char * result = rmchr("This is a great message to test with! It includes a lot of examples!","i");
return 1;
}
在 'rmchr' 函数(if 语句)内部,数组准确地打印出我想要返回的方式:
Ths s a great message to test wth! It ncludes a lot of examples!
问题是我的返回变量“strVal”没有在 if 语句之外被修改。如何永久修改数组,以便我的理想输出将在“结果”内返回(在 main 内)。
【问题讨论】:
-
循环中的第一行无条件复制字符
-
您好,感谢您指出这一点!我删除了那行代码并将 if 语句替换为 if(str[i] != *c)。我测试了输出,似乎仍然没有修改 strVal 值。
-
您必须维护两个索引来修改
strVal和从str读取,因为在跳过字符后索引i在strVal中遥遥领先 -
嗨。欢迎来到社区。如果没有某种有信誉的指南,学习 C 是非常不安全的,因为有些细微的细微差别没有明确定义,您似乎缺少基本概念。你在看哪本书?
-
“剩余的空格也会被删除”是什么意思?您的意思是对于每个被删除的字符,字符串中都不会出现字符,还是有一些启发式,例如“如果要删除的字符前面有一个或多个空格,后面有一个或多个空格,那么只有输出中应该出现一个空格”?为了你,我希望这只是第一个。