- -
Программа Си
(
http://forum.oszone.net/showthread.php?t=309571)
kennydzzze |
24-12-2015 15:26 2588014 |
Программа Си
Прошу помочь. Нужно написать программу, которая выводила бы повторяющиеся слова 1 раз. В моем коде получается, что если какое то слово будет написано более двух раз, то соответственно программа выведет это слово минимум 2 раза. Никак не могу додумать код...
Код:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], O[100][100];
int i, i2, j, k, s;
printf(" Введите слова через пробел: ");
gets(str);
s=strlen(str);
i=0;
j=0;
k=0;
for (i=0; i <= s; i++) // Разбиваем строку на слова
{
if (str[i] == ' ' || str[i] == '\0')
{
O[j][k]='\0';
j++;
k=0;
}
else
{
O[j][k]=str[i];
k++;
}
}
printf(" Вывод повторяющихся слов: \n");
for (i=0; i < j; i++)
{
for (i2=i+1; i2 < j; i2++)
{
if (strcmp(O[i],O[i2])==0)
{
puts(O[i]);
}
}
}
system("pause");
}
|
Хороший вопрос. Надо подумать, но разбивать предложение на лексемы можно и лучше с помощью функции strtok, а сравнивать две строки с помощью функции strcmp
Код:
//Строки, использование strtok
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;
#include <cstring.h>
int main()
{
system("chcp 1251");
char string[] = "Это предложение, тест, содержит несколько тестовых строк: тест - тест";
char *chLeksem[100]; // массив указателей, храним лексемы: один элемент - одно слово
char *tokenPtr;
int chIndex = 0;
cout << "Строка разбивается на лексемы:\n" << string <<"\n\nЛексемы: \n\n";
tokenPtr = strtok(string, " .,-:"); // Разбивка предложения по пробелу, точке, запятой, тире, двоеточие
while(tokenPtr != NULL){
chLeksem[chIndex] = tokenPtr; // Разбиваем предложение на лексемы и сохраняем в массив
chIndex++;
tokenPtr = strtok(NULL, " .,-:");
}
for(int i = 0; i < chIndex; i++)
cout << chLeksem[i] << endl;
// Здесь уже будем сравнивать слова\лексемы, надо подумать как.
system("pause");
return 0;
}
|
kennydzzze |
01-01-2016 20:21 2590388 |
Drongo, Спасибо за ответ. Программу уже написал как смог. Если интересно, то вот код
Скрытый текст
PHP код:
#include <stdlib.h> #include <stdio.h> #include <string.h>
int main() { char str[100], O[100][100], T[100][100]; int i, i2, j, k, s, n, flag; printf(" Введите слова через пробел: "); gets(str); s=strlen(str); i=0; j=0; k=0; for (i=0; i <= s; i++) // разбиваем строку на слова { if (str[i] == ' ' || str[i] == '\0') { O[j][k]='\0'; j++; k=0; } else { O[j][k]=str[i]; k++; } }
n=0; for (i=0; i < j; i++) // { // пузырек for (k=i+1; k < j; k++) // { flag=0; if (strcmp(O[i],O[k])==0) // проверка на совпадение слов { for (s=0; s < j; s++) // проверка на повторение слов { if (strcmp(O[i],T[s])==0) { flag=0; break; } else { flag=1; } } } if (flag==1) // если слово не повторялось, то копируем его в массив, который будем выводить { strcpy(T[n],O[i]); n++; } } }
printf(" Вывод повторяющихся слов: \n"); for(i=0; i < n; i++) { puts(T[i]); } system("pause"); }
Довольно странный способ у меня и не совсем очевидный, но рабочий.
|
Время: 21:58.
© OSzone.net 2001-