我在一个介绍C ++类中,这个赋值应该生成一个"变量名称"为用户根据他们输入的短语。该程序应该用下划线替换所有空格,并删除像" is","","到"等元素以及元音。我被困在如何删除特定字符和字符组合。我们不允许使用字符串,而是使用cstring并将输入数组的部分移动到最终的变量名称"阵列。这就是我现在尝试这样做的方式,但它不起作用。
void remove(char name[21], char copy[21]){//"deletes" or moves filler words and vowels from the inputted phrase
for (int i = 0; i < strlen(name); i++){
if (name[i] == 't'&& name[i + 1] == 'h'&& name[i + 2] == 'e'&& (name [i + 3] == '_' || name[i + 3] == '\0')){
for (int j = 0; j < i; j++){
copy[i] = name[j];
}
for (int j = i + 2; j < strlen(name); j++){
copy[i] = name[j];
}
}
//and for vowels:
else if (toupper(name[i]) == 'A' || toupper(name[i]) == 'E' || toupper(name[i]) == 'I' || toupper(name[i]) == 'O' || toupper(name[i]) == 'U'){
for (int j = 0; j < i; j++){
copy[i] = name[j];
}
for (int j = i; j < strlen(name), j++){
copy[i] = name[j];
}
}
}
我的一些想法是使用其中一个cstring库函数,比如strcpy,或者计算超出&#34; i&#34;你得走了。另外,我担心如果输入中有多个填充词,我会撤消我在单词上所做的事情。非常感谢所有帮助。
答案 0 :(得分:0)
因为这是家庭作业,我会尝试解释你应该如何处理这个问题,而不是直截了当地解决问题:
简单的C字符串副本如下所示:
void MyCStringCopy(char* src, char* dst){
int i =0;
while((dst[i]=src[i])!='\0'){i++;}
}
C-string(char *)本质上是一个字符数组。 src [i]正在查看字符串中的特定字符。如果循环遍历从源到目标的每个字符的字符串,则将复制C字符串。
(src[i]=dst[i])!='\0'
行将满足while循环,直到我们复制null(C字符串的终止符),并且循环体中的i ++确保我们继续在C字符串中移动。 />
要进行过滤后的字符串复制,您需要在复制之前添加其他逻辑。为了您的目的,副本更好地写出来:
void MyCStringCopy(char* src, char* dst){
int i =0;
while(1){
if((dst[i]=src[i])!='\0')
break;
i++;
}
}
在您的情况下,您正在寻找字母和字符串匹配,因此您希望循环遍历每个过滤器术语,并在继续之前将其与字符串中的当前点进行比较。
如果您在源字符串和过滤器术语之间找到匹配项,则您希望&#34;跳过&#34;转发来自源字符串的许多字符 - 这意味着您的读取点和写入点将变为去同步,因此您将要单独存储它们。
要比较您的过滤条件,您希望使用strncmp(str1,str2,length)
或strnicmp(str1,str2,length)
(及其家人),具体取决于您是否要区分大小写;看起来你所拥有的是不敏感的情况,所以第二个就是你想要的那个。 (警告:strncmp&amp; strnicmp不可移植 - 您可能需要自己创建)。
至于替换字符,我分别这样做,因为替换和删除是不同的操作,但是如果你看看复制功能是如何工作的,你应该能够弄清楚如何用一个字符串替换一个字符。另一个。
如果你真的陷入困境,here是在线编译器的解决方案。不过,我建议你自己解决这个问题。