C语言题目如果字符串中有2个以上的相同字符,仅保留最右边的那个,删除其左边的相同字符

Iamastudenttotaketheexamination.其中字符:''(空格),'a','m','t','e','n','o','n','i'都有2个以上,仅保留... I am astudent to take the examination.
其中字符:' '(空格),'a','m','t','e','n','o ','n','i'都有2个以上,
仅保留最右边那个后,输出字符串为:Isudkh exmation.
展开
 我来答
free逍遥星空
2015-12-10 · TA获得超过344个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:205万
展开全部
#include<stdio.h>
struct Tag{
char ch;
int idex;
};
struct{
int cnt;
Tag tags[52];
} tag;
void get_tag(char* str);
void ini_tag();
void sort();
void prt();
int main(){
char str[100];
char ch;
int i = 0;
while ((ch = getchar()) != '\n')
str[i++] = ch;
str[i] = '\0';
ini_tag();
get_tag(str);
sort();
prt();
return 0;
}
void ini_tag(){
tag.cnt = 0;
}
void get_tag(char* str){
int i, j;
for (i = 0; str[i] != '\0'; i++){
for (j = 0; j < tag.cnt; j++){ //多次遇到
if (tag.tags[j].ch == str[i]){
tag.tags[j].idex = i;
break;
}
}
if (j == tag.cnt){ //第一次遇到
tag.tags[tag.cnt].ch = str[i];
tag.tags[tag.cnt].idex = i;
tag.cnt++;
}
}
}
void sort(){
int i,j;
Tag tmp;
for (i = 0; i < tag.cnt; i++){
for (j = i + 1; j < tag.cnt; j++){
if (tag.tags[i].idex > tag.tags[j].idex){
tmp = tag.tags[i];
tag.tags[i] = tag.tags[j];
tag.tags[j] = tmp;
}
}
}
}
void prt(){
int i;
for (i = 0; i < tag.cnt; i++){
printf("%c", tag.tags[i].ch);
}
printf("\n");
}
12345trewqaz
2015-12-10 · TA获得超过161个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:184万
展开全部
#include <stdio.h>
#include <string.h>

char* juststrtail(char*s){
while(*s){
s++;
}
s--;
return s;
}

int main(void){
char buf[80],*ptail,*pcur,res[80];
printf("input the string:");
gets(buf);
ptail=buf;
ptail=juststrtail(buf);
pcur=buf;
while(ptail>buf){
pcur=buf;
while(pcur<ptail){
if(*pcur==*ptail){
*pcur=0;
strcat(buf,pcur+1);
ptail=juststrtail(buf);
}
pcur++;
}
ptail--;
}
puts(buf);
return 0;
}
更多追问追答
追问
能不用指针吗
追答
当然可以,可以把指针的改成数组形式访问,也是一样的,个人习惯而已,感觉指针比较方便,习惯问题。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式