如何"删除"将特定字符组合移动到空数组中的单词和元音?

时间:2015-05-08 07:06:50

标签: c++ arrays c-strings

我在一个介绍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;你得走了。另外,我担心如果输入中有多个填充词,我会撤消我在单词上所做的事情。非常感谢所有帮助。

1 个答案:

答案 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是在线编译器的解决方案。不过,我建议你自己解决这个问题。