C语言编写一个函数,将字符串中连续重复出现的字符去除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编写一个函数,将字符串中连续重复出现的字符去除相关的知识,希望对你有一定的参考价值。

C语言自定义函数,一次性去除连续重复字符,参考代码如下:
#include<stdio.h>
char *fun(char *str)

int i=1,j=0;
if(str==NULL)
return NULL;
if(str[0]==0)
return str;
while(str[i]!=0)
if(str[j]!=str[i])
str[++j]=str[i++];
else ++i;
str[j+1]=0;
return str;

int main()

char str[500];
gets(str);
puts(fun(str));
return 0;
追答

参考技术A int main()

char a[50];
int n=0,i=0,j;
scanf("%s",a);
printf("源:\\n%s\\n",a);
int find;
while(a[i]!='\\0')

find=0;
for(j=0;j<n;j++)

if(a[i]==a[j])

find=1;
break;


if(find==0)

a[n++]=a[i];

i++;

a[n]='\\0';
printf("\\n处理后:\\n%s",a);
return 0;

如何在R语言中查找具有连续字母的字符串中的单词

【中文标题】如何在R语言中查找具有连续字母的字符串中的单词【英文标题】:How to find words in a string that have consecutive letters in R language 【发布时间】:2022-01-09 17:56:39 【问题描述】:

有一个问题我不知道如何解决。

您需要编写一个函数,从包含重复字母的字符串中返回所有单词以及它们在一个单词中的最大重复次数。

从视觉上看,这个阶段可以通过以下示例进行查看: 处理后的"hello good home aboba"应该是hello good,给定字符串中一个字符的最大重复次数=2

我写的代码试图找到重复的字符,并基于此,从一个单独的数组中提取单词,但有些东西不起作用。帮助解决问题。

library(tidyverse)
library(stringr)   

text = 'tessst gfvdsvs bbbddsa daxz'
text = strsplit(text, ' ')
text

new = c()
new_2 = c()

for (i in text)
  
  new = str_extract_all(i, '([[:alpha:]])\\1+')
  if (new != character(0))
    new_2 = c(new_2, i)
  

new
new_2

输出:

Error in if (new != character(0))  : argument is of length zero
> new
[[1]]
[1] "sss"

[[2]]
character(0)

[[3]]
[1] "bbb" "dd" 

[[4]]
character(0)

> new_2
NULL

【问题讨论】:

【参考方案1】:

你可以使用

new <- unlist(str_extract_all(text, "\\pL*(\\pL)\\1+\\pL*"))
i <- max(nchar( unlist(str_extract_all(new, "(.)\\1+")) ))

使用str_extract_all(text, "\\pL*(\\pL)\\1+\\pL*"),您将提取包含至少两个连续相同字母的所有单词,使用max(nchar( unlist(str_extract_all(new, "(.)\\1+")) )),您将获得最长的重复字母块。

见R demo online:

library(stringr)
text <- 'tessst gfvdsvs bbbddsa daxz'
new <- unlist(str_extract_all(text, "\\pL*(\\pL)\\1+\\pL*"))
# => [1] "tessst"  "bbbddsa"
i <- max(nchar( unlist(str_extract_all(new, "(.)\\1+")) ))
# => [1] 3

见this regex demo。 正则表达式详细信息

\pL* - 零个或多个字母 (\pL) - 第 1 组捕获的一封信 \1+ - 一个或多个重复捕获的字母 \pL* - 零个或多个字母

【讨论】:

【参考方案2】:
text = "hello good home aboba"

paste0(
  grep("(.)\\11,", 
       unlist(strsplit(text, " ")), 
       value = TRUE),
  collapse = " ")

[1] "hello good"

【讨论】:

请为正则表达式添加解释。

以上是关于C语言编写一个函数,将字符串中连续重复出现的字符去除的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现压缩二例

纠错:C语言:删除重复字符。

定义一个字符串变量,输入字符串,判断有没有连续重复的字符出现,统计重复字符出现次数,例如aaabaccdfff

怎么C语言编写一个函数字符串的大小写转换

梦龙_C语言作业13

如何用c语言编写一个程序:输入字符串,统计出某指定字符在字符串中出现的次数?