Помогите решить задачу на Си++ (Масивы и ряды)

08.12.2010
13
0
#1
Дан массив слов, и в каждом слове от 2 до 10 малых украинских букв. В каждом
слове удалить все повторные вхождения последней буквы, оставив лишь первое ее
вхождения.


Алгоритм:


C++:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#define N 2	 //Использование макроса
int main(void)
{
int i,j; // Переменные, которые будут использоваться
char *P; //Объявление указателя
char mas[N][11]		//объявление масива
printf("Введите ряд\n");

for(i=0; i<N; i++)
gets(mas[i]); //Ввод ряда

for(i=0; i<N; i++)
{
P=strchr(mas[i],"a");  //Поиск символа
if (P!=NULL)
P+=1
if (strchr(mas[i],"")==0)	  //вывод масива, если символа нет
puts(mas[i]);
}
getch();
return 0;
}
 
08.12.2010
13
0
#3
вместо украинских можно использовать английские и любые другие
 
R

Rififi

#4
наверное, как-то так...

C++:
#include <locale>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>

/*
Дан массив слов, и в каждом слове от 2 до 10 малых украинских букв. В каждом
слове удалить все повторные вхождения последней буквы, оставив лишь первое ее
вхождения.
*/

int main()
{
setlocale(LC_ALL, "");

const std::string source = "foo bar baztabaz";
std::stringstream ss(source);

std::string s;
while (ss >> s)
{
if (s.size() <= 2)
continue;

const char ch = *--s.end();
const size_t pos = s.find(ch);

const std::string::iterator end = --s.end();
s.erase(std::remove(s.begin() + pos, end, ch), end);
std::cout << s << std::endl;
}	

return 0;
}
Вывод:

fo
bar
batabaz