使用c从字符串中删除重复的连续字符
我一直在尝试使用c语言为赋值从字符串中删除重复的连续字符 输入如下:使用c从字符串中删除重复的连续字符,c,C,我一直在尝试使用c语言为赋值从字符串中删除重复的连续字符 输入如下:sheeeiisccomming 输出必须如下所示:sheiscoming 但是我得到了输出:sheiscomng 我无法找出这里出了什么问题,请给出您宝贵的见解 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char str[100]; int i, j, k
sheeeiisccomming
输出必须如下所示:sheiscoming
但是我得到了输出:sheiscomng
我无法找出这里出了什么问题,请给出您宝贵的见解
这是我的密码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
char str[100];
int i, j, k, len;
printf("Enter any string: ");
fgets(str, 100, stdin);
len = strlen(str);
for (i = 0; i < len; i++) {
j = i + 1;
k = i + 2;
while (j < len) {
if (str[j] == str[i]) {
j++;
} else {
str[k] = str[j];
k++;
j++;
}
}
len = k;
}
printf("\nString after removing characters:");
for (i = 0; i < len; i++) {
printf("%c", str[i]);
}
}
#包括
#包括
#包括
void main(){
char-str[100];
int i,j,k,len;
printf(“输入任何字符串:”);
fgets(str,100,stdin);
len=strlen(str);
对于(i=0;i
您应该使用len=k更新字符串的长度在for
循环的结束后进行编码
但是请注意,在缩短字符串以使其成为正确的C字符串时,还应在新长度处设置空终止符
以下是一个更简单的版本:
#include <stdio.h>
int main() {
char str[100];
int i, j;
printf("Enter any string: ");
if (fgets(str, sizeof str, stdin)) {
for (i = j = 0; str[i] != '\0'; i++) {
if (j == 0 || str[j - 1] != str[i]) {
str[j] = str[i];
j++;
}
}
str[j] = '\0';
printf("String after removing characters: %s\n", str);
}
return 0;
}
#包括
int main(){
char-str[100];
int i,j;
printf(“输入任何字符串:”);
如果(fgets(str,sizeof str,stdin)){
对于(i=j=0;str[i]!='\0';i++){
如果(j==0 | | str[j-1]!=str[i]){
str[j]=str[i];
j++;
}
}
str[j]='\0';
printf(“删除字符后的字符串:%s\n”,str);
}
返回0;
}
不确定您的代码,但您可以执行以下操作
char str[]="sheeeeisssscommmiingg";
int i, j;
for(i=j=0; str[j]; i++)
{
str[i]=str[j];
for(j++; str[j]==str[i]; ++j);
}
str[i]=`\0`;
printf("\n%s", str);
通过外部循环检查字符串中的字符后,使用内部for
循环跳过相同的后续字符
原始字符串将被覆盖
最后,nul终止符被添加到新字符串的末尾
也要考虑阅读。
这种情况下的输出为:
sheiscoming
单回路。很好,非常感谢,非常有用@chqrlie