设为首页 加入收藏

TOP

C语言经典编程之字符串(一)
2015-07-16 12:04:13 来源: 作者: 【 】 浏览:113
Tags:语言 经典 编程 字符串

1、按特定顺序输出压缩

输入一段字符串,把相同的字符按出现顺序,归在一起,并压缩。

例如:

输入:SamSameCome

输出:

SSaammmeeCo

S2a2m3e2C1o1

【难度系数】 ▲ ▲ ▲ ▲

【分析】

【代码】

#include 
  
   
#include 
   
     int main(void) { char ch[100]; char str[100]; char s; int i = 0; int j = 0; int count = 1; int k = 0; scanf("%s", ch); for(i = 0; i < strlen(ch); i++) { if(ch[i] != ' ') { s = ch[i]; for(j = 0; j < strlen(ch); j ++) { if(s == ch[j]) { str[k] = ch[j]; k++; ch[j] = ' '; } } } } printf("%s\n", str); for(i = 0; i < strlen(str); i++) { if(str[i] == str[i + 1]) { count ++; } else { printf("%c%d", str[i], count); count = 1; } } printf("\n"); return 0; } 
   
  

2、IP地址判断是否合法

输入一个IP地址,判断时候ip地址合法

ip地址由4位0-255组成 中间使用 . 隔开

合法的ip地址是:

21.45.34.112 是合法的

第一位不能为全0

0.45.34.112 是不合法的

每一位不能超过255

【代码】

#include 
  
   
#include 
   
     #include 
    
      int main(void) { char ip[20] = {}; int i = 0, j = 0; int num[4] = {}; scanf("%[^\n]", ip); char *sep = "."; char *p = strtok(ip, sep); while(p != NULL) { num[i ++] = atoi(p); p = strtok(NULL, sep); } if(num[0] == 0 || num[0] >255 || num[1] > 255 || num[2] > 255 || num[3] > 255) printf("NO\n"); else printf("YES\n"); return 0; } 
    
   
  

3、字符串压缩

字符串原地压缩。题目描述:“eeeeeaaaff" 压缩为 "e5a3f2"。

字符串压缩算法,把s字符串压缩处理后结果保存在res中

比如:

输入

aaaaeefggg

输出为

a4e2f1g3

输入

hhfhhhhff

输出为

h2f1h4h2

【代码】

#include 
  
   
#include 
   
     int main(void) { char ch[100]; int i = 0; int count = 1; scanf("%s", ch); for(i = 0; i < strlen(ch); i++) { if(ch[i] == ch[i + 1]) { count ++; } else { printf("%c%d", ch[i], count); count = 1; } } return 0; } 
   
  

4、字符串解压

字符串原地压缩。题目描述:"e5a3f2" 解压缩为 “eeeeeaaaff"。

字符串压缩算法,把s字符串压缩处理后结果保存在res中

比如:

输入

a4e2f1g3

输出为

aaaaeefggg

输入

h2f1h4h2

输出为

hhfhhhhff

【代码】

#include 
  
   
#include 
   
     int main(void) { char ch[100]; char s[100]; int i = 0, j = 0; int num = 0; scanf("%s", ch); for(i = 0; i < strlen(ch); i++) { if(ch[i] >= 'a' && ch[i] <= 'z') { if(ch[i + 1] >= '0' && ch[i + 1] <= '9') { if(ch[i + 2] >= '0' && ch[i + 2] <= '9') { num = (ch[i + 1] - 48) * 10 + (ch[i + 2] - 48); } else num = ch[i + 1] - 48; } for(j = 0; j < num ; j++) { printf("%c", ch[i]); } } } printf("\n"); return 0; } 
   
  

5、字符串排序

输入一个字符串,然后返回连续最大的字符串

比如demo

1,3,3,3,4,4,4,4,4,0,0,0,4,4,4,4

,此例中由5个连续的4为最大连续子串,返回结果为44444.

1,3,3,3,4,4,4,4,4,0,0,0,0,0,0,5,5,5,5 返回44444;

1,3,3,3,5,5,5,5,5,4,4,4,4,4,0,0,0,0,0,0,4,4,4,4},返回55555;

这是公司OC面试题

【代码】

#include 
  
   

int main(void)
{
    char ch[100];
    int count = 1;
    int i = 0;
    int j = 0;
    int max = 0;
    
    scanf("%[^\n]", ch);
    
    while(ch[i] != '\0')
    {
        if(ch[i] != '0' && ch[i] == ch[i + 2])
        {
            count ++;
        }
        else
        {
            if(count > max)
            {
                max = count;
                j = i;
            }
            count = 1;
        }
        i += 2;
    }

    for(i = 0; i < max; i ++)
    {
        printf("%c", ch[j]);
    }
    printf("\n");
    
    
    return 0;
}

  

6、查找相同的字串

返回在两字符串中第一个相同的子串(大于1个字符),并将子串输出

比如:

输入

adbAFEHHFS

acwfagAFEf

输出为

AFE

输入

qfdgJKlin

qdfgJKwfo

输出为

gJK

【代码】

#include 
  
   
#include 
   
     int main(void) { char ch1[100] = {}; char ch2[100] = {}; int i = 0, j = 0; int flag = 0, flag2 = 0; scanf("%s", ch1); getchar(); scanf("%s", ch2); while(ch1[i] != '\0') { for(j = 0; j < strlen(ch2); j++) { if(ch1[i] == ch2[j] && ch1[i + 1] == ch2[j + 1]) { flag = 1; printf("%c", ch1[i]); i++; } else { if(flag == 1) { flag2 = 1; printf("%c", ch1[i]); break; } } } if(flag2 == 1) break; i++; } printf("\n"); return 0; } 
   
  

7、单词升序排列

输入一段字符串将单词升序排列

比如:

输入 come good goals bad bed

输出:

bad bed come goals good

输入 I am Optimus Prime

输出:

I Optimus Prime am

【代码】

#include 
  
   
#include 
   
     int main(void) { char ch[100] = {}; int i = 0, j = 0, k = 0; char *p[10] = {"zhangsan", "lisi", "wangwu"}; char *temp; scanf("%[^\n]", ch); p[0] = ch; while(ch[i] != '\0') { if(ch[i] == ' ') { j++; p[j] = &ch[i + 1]; ch[i] = '\0'; } i++; } for(i = 0; i < j; i++) { for(k = 0; k < j - i; k++) { if(strcmp(p[k],p[k + 1]) > 0) { temp = p[k]; p[k] = p[k + 1]; p[k + 1] = temp; } } } for(i = 0; i <= j; i++) { printf("%s ", p[i]); } printf("\n"); return 0; } 
   
  

8、统计单词个数

输入一段字符串,统计其中的单词个数

比如:

输入 I like iOS

输出:

3


输入 this is Qian Feng College

输出:

5

【代码】

#include 
  
   
#include 
   
     int main(void) { char str[100] = {}; int i = 0; int count = 0; scanf("%[^\n]", str); char *sep = " "; char *p[10]; p[0] = strtok(str, sep); while(p[i] != NULL) { count ++; printf("%s\n", p[i]); p[++i] = strtok(NULL, sep); } printf("The number of words is : %d\n", count); return 0; } 
   
  

9、Objective-C和C++命名之争

Demo1:

Input:

long_and_mnemonic_identifier

Output:

longAndMnemonicIdentifier


Demo2:

Input:

longAndMnemonicIdentifier

Output:

long_and_mnemonic_identifier


Demo3:

Input:

bad_Style

Output:

Error!

【代码】

#include 
  
   
#include 
   
     int main(void) { char ch[100] = {}; int i = 0, j = 0; scanf("%s", ch); while(ch[i] != '\0') { if(ch[i] == '_' && (ch[i + 1] >= 97 && ch[i + 1] <= 122)) { for(j = i; ch[j] != '\0'; j++) { ch[j] = ch[j + 1]; } ch[i] -= 32; } else if(ch[i] >= 65 && ch[
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇object-c 框架之常用结构体 下一篇(C语言)可变参数列表

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: