проблема с русским языком на си. программа работет нормально если подставить английские буквы вместо русских в строку vowels. Помогите
#include <stdio.h>
#include <string.h>
#include <locale.h>
void ifcharinset(char c, char* vowels, char* setvowels);
int main() {
char str[100];
scanf("%[^\n]s", str);
char x[256] = "f ";
char y[] = " f";
strcat(str, y);
strcat(x, str);
strcpy(str, x);
printf("%s\n", str);
char vowels[] = {'а','е','ё','и','о','у','ы','э','ю','я', '\0'};
char setvowels[] = {'0','0','0','0','0','0','\0'};
int k = 0;
for (int i = 1; i < strlen(str); i++) {
if (str[i] != ' ' && str[i-1] == ' ')
k++;
if (str[i] != ' ' && str[i-1] == ' ' && k > 1 )
{
for(int ii = 0; ii < strlen(vowels); ii++)
{
if (setvowels[ii] == '0')
vowels[ii] = '0';
setvowels[ii] = '0';
}
}
if (str[i] != ' ')
{
ifcharinset(str[i], vowels, setvowels);
}
}
for (int i = 0; i < strlen(vowels); i++) {
if (vowels[i] != '0')
printf("%c ", vowels[i]);
}
return 0;
}
void ifcharinset(char c, char* vowels, char* setvowels)
{
for(int i = 0; i < strlen(setvowels); i++)
if (c == vowels[i])
{
setvowels[i] = '1';
}
}
выдает ошибку main.c:21:18: warning: multi-character character constant [-Wmultichar]
Ответы (1 шт):
Автор решения: anton
→ Ссылка
Используйте тип wchar_t:
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>
void is_char_in_set(wchar_t c, wchar_t * vowels, char * setvowels);
int main(void)
{
wchar_t str[100];
fgetws(str, 100, stdin); /* ради бога, используйте fgets/fgetws */
wchar_t x[256] = L"f ";
wchar_t y[] = L" f";
wcscat(str, y);
wcscat(x, str);
wcscpy(str, x);
fputws(str, stdout);
wchar_t vowels[] = L"аеёиоуыэюя";
char setvowels[] = "000000";
int k = 0;
for (size_t i = 1; i < wcslen(str); ++i)
{
if (str[i] != L' ' && str[i - 1] == L' ')
{
k++;
}
if (str[i] != L' ' && str[i - 1] == L' ' && k > 1 )
{
for (size_t j = 0; j < wcslen(vowels); ++j)
{
if (setvowels[j] == '0')
vowels[j] = L'0';
setvowels[j] = '0';
}
}
if (str[i] != ' ')
{
is_char_in_set(str[i], vowels, &setvowels[0]);
}
}
for (size_t i = 0; i < wcslen(vowels); ++i)
{
if (vowels[i] != '0')
{
putwchar(vowels[i]);
}
}
return 0;
}
void is_char_in_set(wchar_t c, wchar_t * vowels, char * setvowels)
{
for (size_t i = 0; i < strlen(setvowels); ++i)
{
if (c == vowels[i])
{
setvowels[i] = '1';
}
}
}