Алгоритм со строками
Задание:
Заменить цифры от 0 до 9 словами (если подряд встречаются две цифры и более, то данное число трактуется как две цифры, т.е. 23 – это 2 и 3). Пример: заменить «1 урок» на «один урок».
Код:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
void main()
{
char str[100],s;
int i=0;
printf("Vvedite text: ");
do
{
s=getchar();
str[i++]=s;
}
while (s!='\n');
str[--i]='\0';
//??????????????
printf( "New String : %s\n", str );
getchar();
}
#include <stdio.h>
#include <string.h>
void main()
{
char str[100],s;
int i=0;
printf("Vvedite text: ");
do
{
s=getchar();
str[i++]=s;
}
while (s!='\n');
str[--i]='\0';
//??????????????
printf( "New String : %s\n", str );
getchar();
}
Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* digit_to_word(char* str) {
size_t len, pos, k;
char* tmp = str;
char* ds[10] = {
"нуль", "один", "два", "три", "четыре",
"пять", "шесть", "семь", "восемь", "девять"
};
while((str = strpbrk(str, "0123456789")) != NULL) {
k = (isdigit(*(str + 1))) ? 0u : 1u;
len = strlen(ds[*str - '0']);
pos = strlen(str);
memmove(str + (len - k), str, pos);
memcpy(str, ds[*str - '0'], len);
*((str) + (pos + len)) = '\0';
str += len;
*str = ' ';
}
return tmp;
}
int main(void) {
char s[255] = "1 урок, 7 чудес света. 0123456789";
/*
printf("enter str: ");
fgets(s, sizeof(s) - 1, stdin);
*/
puts( digit_to_word(s) );
return 0;
}
#include <string.h>
#include <ctype.h>
char* digit_to_word(char* str) {
size_t len, pos, k;
char* tmp = str;
char* ds[10] = {
"нуль", "один", "два", "три", "четыре",
"пять", "шесть", "семь", "восемь", "девять"
};
while((str = strpbrk(str, "0123456789")) != NULL) {
k = (isdigit(*(str + 1))) ? 0u : 1u;
len = strlen(ds[*str - '0']);
pos = strlen(str);
memmove(str + (len - k), str, pos);
memcpy(str, ds[*str - '0'], len);
*((str) + (pos + len)) = '\0';
str += len;
*str = ' ';
}
return tmp;
}
int main(void) {
char s[255] = "1 урок, 7 чудес света. 0123456789";
/*
printf("enter str: ");
fgets(s, sizeof(s) - 1, stdin);
*/
puts( digit_to_word(s) );
return 0;
}