C语言-字符串题目
基础操作
my_strlen: 编写程序,计算给定字符串的长度(不使用strlen函数)。
int my_strlen(char *str){ int count = 0; while(*str){ count++; str++; } return count; }
my_strcpy: 实现字符串复制功能(不使用strcpy函数)。
char *my_strcpy(char *str1, char *str2){ char *p = str1; while(*str2){ *p++ = *str2++; } return str1; }
my_strcat: 编写程序,将两个字符串连接起来(不使用strcat函数)。
char *my_strcat(char *str1, char *str2){ char *p = str1; while(*p){ p++; } while(*str2){ *p++ = *str2++; } *p = 0; return str1; }
my_strcmp: 实现字符串比较功能(不使用strcmp函数)。
int my_strcmp(char *str1, char *str2){ while(*str1 == *str2 && *str1 && *str2){ if(*str1 > *str2){ return 1; } if(*str1 < *str2){ return -1; } str1++; str2++; } if(*str1 == *str2){ return 0; }else if(*str1){ return 1; }else{ return -1; } }
to_uppercase: 编写函数,将字符串中的所有字符转换为大写形式。
char *to_uppercase(char *str){ char *p = str; while(*p){ if(*p >= 'a' && *p <= 'z'){ *p -= 32; } p++; } return str; }
查找与统计
count_char: 编写程序,统计字符串中某个特定字符出现的次数。
int count_char(char *str, char target){ int count = 0; while(*str){ if(*str == target){ count++; } str++; } return count; }
find_first_digit: 查找字符串中第一个出现的数字字符并返回其位置。
int find_first_digit(char *str){ int i = 0; while(*str){ if(*str >= '0' && *str <= '9'){ return i+1; } str++; i++; } return -1; }
count_words: 统计字符串中单词的个数(单词间用空格分隔)。
int count_words(char *str){ int inword = 0, count = 0; while(*str){ if(inword&&(*str == ' ' || *str == '.' || *str == '?' || *str == '!' || *(str+1) == 0)){ inword = 0; count++; } if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z'){ inword = 1; } str++; } return count; }
find_longest_word: 找出字符串中最长的单词并输出。
void find_longest_word(char *str){ int inword = 0, count = 0, max_count = 0; char *p; while(*str){ if(inword&&(*str == ' ' || *str == '.' || *str == '?' || *str == '!' || *(str+1) == 0)){ inword = 0; if(count > max_count){ max_count = count; p = str-count; } } if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z'){ if(!inword){ count = 0; } inword = 1; } count++; str++; } while(max_count){ putchar(*p++); max_count--; } printf("\n"); }
is_palindrome: 编写程序,检查字符串是否是回文(正读反读都相同)。
int is_palindrome(char *str){ char *p, *q; p = q = str; while(*q) q++; q--; while(p < q){ if(*p != *q){ return 0; } p++; q--; } return 1; }
转换与修改
swap_case: 将字符串中的大小写字母互换(大写转小写,小写转大写)。
char *swap_case(char *str){ char *p = str; while(*p){ if(*p >= 'a' && *p <= 'z'){ *p -=32; }else if(*p >= 'A' && *p <= 'Z'){ *p +=32; } p++; } return str; }
remove_spaces: 删除字符串中所有的空格字符。
char *remove_spaces(char *str){ char *p, *q; p = q = str; while(*q){ if(*q != ' '){ *p++ = *q; } q++; } *p = 0; return str; }
replace_digits: 将字符串中的数字字符替换为'*'。
char *replace_digits(char *str){ char *p = str; while(*p){ if(*p >= '0' && *p <= '9'){ *p = '*'; } p++; } return str; }
reverse_string: 编写程序,反转字符串(不使用库函数)。
char *replace_digits(char *str){ char *p = str; while(*p){ if(*p >= '0' && *p <= '9'){ *p = '*'; } p++; } return str; }
remove_vowels: 将字符串中的所有元音字母(a,e,i,o,u)删除。
char *remove_vowels(char *str){ char *q, *p; p = q = str; while(*q){ switch(*q){ case 'a': case 'e': case 'i': case 'o': case 'u':break; default:*p++ = *q; } q++; } *p = 0; return str; }
高级操作
insert_string: 实现字符串的插入操作:在指定位置插入另一个字符串。
char *insert_string(char *str1, char *str2, int index){ char *p = str1+strlen(str1)-1; while(p >= (str1+index-1)){ *(p+strlen(str2)) = *p; p--; } p = str1+index-1; while(*str2){ *p++ = *str2++; } return str1; }
delete_substring: 编写程序,从字符串中删除指定的子字符串。
char *delete_substring(char *str1, char *str2){ char *p, *q, *t; p = q = str1; while(*q){ if(*q == *str2){ t = str2; while(*++q == *++t && *t); if(*t == 0){ continue; printf("#\n"); }else{ q-=t-str2; } } *p++ = *q++; } *p = 0; return str1; }
simple_encrypt: 实现简单的字符串加密:将每个字符的ASCII码值加1。
char *simple_encrypt(char *str){ char *p = str; while(*p){ *p += 1; p++; } return str; }
longest_common_substring: 编写程序,找出两个字符串中的最长公共子串。
void longest_common_substring(char *str1, char *str2){ int i, j, k, l, max_len, start; for(i=0;i<strlen(str1)-1;i++){ for(j=i+1;j<strlen(str1);j++){ int cur_len = j-i+1; for(k=0;k<=strlen(str2)-cur_len && cur_len <=strlen(str2);k++){ int match = 1; for(l=0;l<cur_len;l++){ if(str1[i+l] != str2[k+l]){ match = 0; } } if(match && cur_len > max_len){ max_len = cur_len; start = i; } } } } if(max_len > 0){ for(i=start;i<start+max_len;i++){ putchar(str1[i]); } printf("\n"); } }
sort_string: 实现字符串的排序(按ASCII码值升序排列)。
char *sort_string(char *str){ int i, j; char temp; for(i=0;i<strlen(str)-1;i++){ for(j=0;j<strlen(str)-1-i;j++){ if(str[j] > str[j+1]){ temp = str[j]; str[j] = str[j+1]; str[j+1] = temp; } } } return str; }