字符串练习C语言

文章介绍了使用C语言进行字符串操作的方法,包括将数组转换为字符串,利用ASCII码进行字符转换,检查字符串是否为变形词,单词翻转以及替换字符串中的空格。
摘要由CSDN通过智能技术生成

1、字符串转为数组,数组转为字符串

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    int main(int argc, char *argv[])
{
    //1、组转字符串
    int arr[7]={1,2,3,4,5,6,7};
    char str[5];
    char str1[10];

    for(int i=0;i<7;i++){
        sprintf(str,"%d",arr[i]);//将每一个数字转换成字符或者字符串
        strcat(str1,str);//strcat将str拼接到str1中,把字符或者字符串拼接起来
    }
    printf("%s\n",str1);

    //2、利用ASCII方式进行转换
    int arr1[7]={1,2,3,4,5,6,7};
    int j;
    char str2[10];

    for( j=0;j<7;j++){
        str2[j]=arr1[j]+'0';
    }
    str2[j] = '\0';   //不可省略,因为字符串要以'\0'才表示结束,否则剩余的空格都会被输出
    printf("%s\n",str2);

    //3、字符串转数组
    int arr2[10];
    char str3[ ]="123456";

    for(int y=0;y<strlen(str3);y++){
        arr2[y]=str3[y]-'0';
        printf("%d",arr2[y]);
    }

    return 0;
}

2、变形词

对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
   char str1[100];
   char str2[100];
   int arr[255]={0};
   gets(str1);
   gets(str2);
   int l1,l2;
   l1=strlen(str1);
   l2=strlen(str2);
   if(l1!=l2){
    printf("不是变形词");
   }
   else{
    for(int i=0;i<l1;i++){
        arr[str1[i]]++;//字符串中的字符可以直接转换成下标
        arr[str2[i]]--;
    }
   }
   for(int i=0;i<256;i++){
    if(arr[i]!=0){
        printf("不是变形词");
        break;
    }
    if(i==255)
        printf("是变形词");
   }
    return 0;
}

3、单词翻转

从键盘输入一个字符串,包含很多个单词。每个单词之间以1个或多个空格隔开。要求翻转每个单词,但是单词在句子中的顺序不变。注意行前和行后可能有多个空格。

输入样例:输入一个字符串(总长度不超过1000),里面包含n(n<50)个单词,每个单词不超过20个字母;且保证输入的字符只含英文字母和空格。

   I    ma    a     tneduts       
olleH   dlroW

输出样例:输出翻转后的字符串。每个单词之后输出一个空格,不能有多余的空客;且行末必须、只能有一个空格。 

Hello World 
I am a student 

代码如下: 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char str[100];
    int i,l;
    int count=1;
    gets(str);
    l=strlen(str);
    for(i=0;i<l;){
        if((i==0&&str[0]!=' ')||(str[i]==' '&&str[i+1]!=' ')){//判断一个单词的开始
            for(int j=i+1;;j++){
                if(str[j+1]!=' '&&(j!=l)){
                count++;//获取这个单词的长度
                }
                else{
                    break;
                }
            }
            for(int z=i+count;z>i;z--){
                printf("%c",str[z]);
            }
            printf(" ");//每个单词后面输出一个空格
            i=i+count+1;
           count=1;
           }
           else{
            i++;
           }
           }


    return 0;
}

4、替换空格

/*
请编写一个方法,将字符串中的空格全部替换为“%20”。
假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),
同时保证字符串由大小写的英文字母组成。
给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。
测试样例:
"Mr John Smith”,13
返回:"Mr%20John%20Smith"
 */

代码如下: 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char str[1000];
    gets(str);
    int l;
    l=strlen(str);
    int ll=l;
    for(int i=0;i<l;i++){
        if(str[i]==' '){
            for(int j=l+2;j>i+2;j--){
                str[j]=str[j-2];
            }
            str[i]='%';
            str[i+1]='2';
            str[i+2]='0';
            l=l+2;
        }
    }
    puts(str);
    return 0;
}


 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值