C言語----------文字列ウィジェット練習(一)


1、入力された文字列が「回文」であるか否かを判断する(順読みと逆読みともに)文字列
#include <stdio.h>
#include <string.h>

#define N 100

int palindrome(char *s, int n)
{
	char *head, *tail;
	head = s;
	tail = s + n -1;
	int i;

	for(i = 0; i < n / 2; head++, tail--, i++)
	{
		if(*head != *tail)
			return 0;
	}
	return 1;
}

int main(void)
{
	char str[N];
	
	printf("input a string:");
	scanf("%s", str);
	if(palindrome(str, strlen(str)))
		printf("is palindrome
"); else printf("is not palindrome
"); return 0; }

2、キーボードから文字列を受け取り、文字順に小さいから大きいまで並べ替えて重複文字を削除します.キーボードから入力した内容が「agehiagehp」の場合、プログラムを実行した後に「aeghiip」になります.
#include <stdio.h>
#include <string.h>

#define N 100

char *sort_del(char *p, int len)
{
	char tmp;
	int i, j;
	
	for(i = 0; i < len; i++)
	{
		for(j = i+1; j < len; j++)
		{
			if(p[i] > p[j])
			{
				tmp = p[i];
				p[i] = p[j];
				p[j] = tmp;
			}
		}
	}
	j = 0;
	for(i = 0; i < len; i++)
	{
		if(p[i] != p[i + 1])
			p[j++] = p[i];
	}
	p[j] = '\0';

	return p;
}

int main(void)
{
	char str[N];
	int i;

	printf("please input a string:");
	scanf("%s", str);

	sort_del(str, strlen(str));

	printf("%s
", str); return 0; }

3、プログラミングプログラムは1つの英語文の中で最も長い単語の長さ(アルファベット個数(max)を計算し、その英語文にアルファベットとスペースしか含まれていないと仮定し、スペースの間に連続したアルファベット列を単語と呼ぶ.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 100

int word_num(char *s)
{
	int cnt = 0;
	
	while(*s)
	{
		if((*s != ' ') && ((*(s + 1) == ' ') || (*(s + 1) == '\0')))
			cnt++;
		s++;
	}
	return cnt;
}

int word_len(char *s)
{
	int a[N];
	int max = 0, i = 0;
	int j = 0;

	while(*s)
	{
		if(*s != ' ')
			a[i] = ++j;
		else 
		{
			a[++i] = 0;
			j = 0;
		}
		s++;
	}

	for(i = 0; i < 5; i++)
		if(a[i] > max)
			max = a[i];

	return max;
}

int main(void)
{
	char str[N];

	printf("please input words:
"); fgets(str, N, stdin); printf("%d
", word_num(str)); printf("%d
", word_len(str)); return 0; }

4、所定のプログラムにおいて、関数funの機能は、パラメータsが指す文字列のすべてのアルファベット文字を順番に前に移動し、他の文字を後に移動し、処理後の新しい文字列のヘッダアドレスを関数値として返すことである.例えば、sが指す文字列は、asd 123 fgh 543 dfであり、処理後の新しい文字列は、asdfghdf 123543
#include <stdio.h>
#include <string.h>

#define N 100

char *fun(char *s, int len)
{
	char b[N];
	int i;
	int j = 0, k = 0;
	char *p = s;

	for(i = 0; i < len; i++, p++)
	{
		if((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z'))
			s[j++] = *p;
		else
			b[k++] = *p;
	}
	s[j] = '\0';
	b[k] = '\0';
	strcat(s, b);

	return s;
}

int main(void)
{
	char str[N];

	printf("input a string:");
	scanf("%s", str);

	puts(fun(str, strlen(str)));

	return 0;
}