[英]Program to remove all occurrences of a word in given string
我已经编写了代码,但是 output 不正确:如果我输入How you doing
How you doing
原始字符串然后想要删除you
,则 output 应该是How doing
,而是 Z78E6221F6393D135DZF6393D135DZF681DBCEame输入字符串)。
这是我的代码:
void removeWord(char *,char *);
int main() {
char str[100];
printf("Enter any string: ");
gets(str);
char re[20];
printf("\nEnter word to remove: ");
gets(re);
printf("\nString befor removing '%s' : \n%s", re, str);
removeWord(str, re);
printf("\nString after removing '%s' : \n%s", re, str);
return 0;
}
void removeWord(char *str, char *re) {
int slen, rlen, found, j;
slen = strlen(str);
rlen = strlen(re);
for (int i = 0; i <= slen - rlen; i++) {
found = 1;
for (j = 0; j < rlen; j++) {
if (str[i + j] != re[i + j]) {
found = 0;
break;
}
}
if (str[i + j] != ' ' && str[i + j] != '\t' && str[i + j] != '\n' && str[i + j] !='\0')
found = 0;
if (found == 1) {
for (int k = i; k <= slen - rlen; k++)
str[k] = str[k + rlen];
slen -= rlen;
i--;
}
}
}
您可以使用预定义的 function 来获取 substring 的第一个索引。 在 C 我们有 function 'strstr()'。 如果字符串中存在子字符串,它将返回该子字符串的第一个索引,否则如果不存在,它将返回该数据数据类型中可能的最高值。
在 cpp 我们有 'size_t found = str.find(substr); '在 C++ 中查看有关 GFG 字符串的这篇文章
这是从给定字符串中删除 substring 的最佳方法。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="My name is ankit mishra";
string sub="name is";
size_t found = str.find(sub);
int len=sub.length();
int l=str.length();
int len_diff=l-found+1-len;
int tag;
cout<<"Original String: "<<str<<endl;
cout<<"Sub-String: "<<sub<<endl;
int i=found;
while(len_diff--)
{
str[i]=str[i+len];
i++;
}
string newstr;
for(int j=0;j<i;j++)
newstr+=str[j];
cout<<"New String :" <<newstr;
}
这是执行此操作的代码的更新:
你有一些代码来捕捉一个给它带来很多问题的极端案例。 我把它注释掉了,因为我不明白它的目的。 如果我错过了它的重要性,请查看它。 我还纠正了一些索引错误。
#include <stdio.h>
#include <string.h>
void removeWord(char *,char *);
int main()
{
char str[100] = {0}; //Initialize fully
char re[20] = {0};
printf("Enter any string: ");
gets(str);
printf("\nEnter word to remove: ");
gets(re);
printf("\nString before removing '%s' : %s",re,str);
removeWord(str,re);
printf("\nSrting after removing '%s' : %s",re,str);
return 0;
}
void removeWord(char *str,char *re)
{
int slen,rlen,found,j,k;
slen = strlen(str);
rlen = strlen(re);
for(int i=0; i<=slen-rlen; i++)
{
found = 1;
for(j=0; j<rlen; j++)
{
if(str[i+j] != re[j])
{
found = 0;
break;
}
}
if(found == 1)
{
for(k=i;k<rlen;k++)
{
str[k] = str[k + rlen];
}
str[k] = '\0';
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.